zoukankan      html  css  js  c++  java
  • git学习笔记

    以前都是直接用Github for windows图形客户端来上传代码,并不了解git的命令,也远没有发挥出git应有的威力。如今在做一个CMS的项目,最后需要将其部署到远端服务器上,而经过前端工程化思想的洗礼之后,我已无法忍受手工传文件到服务器的"FTP部署法",因为这样原始低效易出错,且严重不利于维护更新。本着能自动化就自动化的精神,我开始研究用git来部署网站的方法。
    学习资料链接:http://blog.jobbole.com/78960/
    git仓库(repo)是指存放项目文件的目录,这个目录下有一个.git隐藏文件(如果没有,用git init生成),里面是用于版本管理的相关文件,别乱动。
    .git是版本库,其中最重要的是stage(暂存区),还有git自动创建的分支master,以及指向master的一个指针HEAD。
    进入暂存区的文件被暂时“锁定”等待提交,文件在加入暂存区之后发生的变动不影响暂存区,提交以暂存区版本为准。
    注意:命令里可以使用通配符*?等。
    常用命令
    git init 初始化版本库(--bare 生成裸库,即只有记录版本库历史信息的文件,而没有实际项目源文件的拷贝)
    git add [file]:将文件添加到暂存区等待提交。文件被添加暂存区后所发生的变动将不被提交,除非重新添加一次。
    git commit -m [message]:将暂存区的文件提交到HEAD指向的当前分支上
    git diff [file]:查看文件相对于分支上的变动
    git status [file]:查看文件状态
    git checkout -- [file]:用暂存区文件覆盖工作区文件,相当于丢弃上次add以来的变动。git checkout . 表示用暂存区的所有文件覆盖工作区文件。
    git log 查看提交日志
    git reflog 查看最新动作日志
    git reset --hard [版本号] 恢复指定版本
    git reset -hard HEAD^ 恢复到上一个版本(一个^表示一个版本,或者用~[数字]表示回退版本数)
    分支策略
    一般master分支是最稳健的,用于发布新版本,不能在上面干活,干活都应该在别的分支上,干完再合并到master。
    git branch [branch] 创建新分支
    git checkout [branch] 切换到指定分支(带上-b参数表示同时创建新分支)。切换分支后,仓库里的文件内容会变到与当前分支相同。
    git merge [branch] 将指定分支合并到当前分支。当合并分支与当前分支有冲突时,git会在合并后的文件中标注出来,须手动消除冲突后再提交一次。
    git branch -d [branch] 删除指定分支
    git stash 隐藏当前分支的工作现场,比如工作进行到一半时无法提交,但必须切换分支,此时可使用这个命令。
    git stash list 列出被隐藏起来的工作现场
    git stash apply/drop 恢复现场/...并删除隐藏的工作现场
    远程操作
    git remote 查看远程库信息(参数-v查看详细信息)
    git remote add [remote branch] [server]:在远端服务器上克隆本地仓库,远程库名默认为origin
    git push [remote branch] [branch]:将分支推送到远端仓库(第一次推送时在push后面加上-u参数)
    git clone [remote address]:将远端(Github)的仓库克隆到本地,git自动将本地master和远程master对应起来
    策略:哪些分支需要推送?
    1. master是主分支,需要时刻与远程同步
    2. 开发分支不需要推送到远程,可以合并到master之后再推送
    git pull 从远程拉取分支到本地
    git branch --set-upstream-to [local branch] origin/[branch] 关联本地分支与远程分支
     

    多人协作工作模式一般是这样的:

    1. 首先,可以试图用git push origin branch-name推送自己的修改.
    2. 如果推送失败,则因为远程分支比你的本地更新早,需要先用git pull试图合并。
    3. 如果合并有冲突,则需要解决冲突,并在本地提交。再用git push origin branch-name推送。

    附:利用git向服务器部署Node.js项目代码的方法:

    1. 在服务器上创建项目目录,初始化为git仓库:git init,配置为允许接收代码提交:git config receive.denyCurrentBranch ignore
    2. 在本地项目创建远程分支:git remote add 远程分支名 ssh://用户名@远程地址/项目路径/.git
    3. 将项目的master分支push到服务器上:git push 远程分支名 master
    4. 到服务器端git staus,会发现暂存区内一堆的反操作(例如将本来应该保留的文件delete掉)。此时先更新再检出代码 git update-server-info、git checkout -f,效果是将所有文件还原到最后一次commit的版本,暂存区内的修改被丢弃。
    5. 然后npm install补上node_modules就可以了!
    6. 服务器端添加自动更新钩子脚本:1)cd .git/hooks;2) 新建 post-receive 或将 post-receive.sample 重命名为 post-receive;使用post-update也可以, 不过需要先将post-update中的exec git update-server-info这一行删掉;3)vim post-receive,将如下内容复制到文件中
      • #!/bin/sh
      • unset GIT_DIR
      • cd ..
      •  git checkout -f
    7. 安装pm2来守护网站
    8. 在Linux系统下监听低于1024的端口,需要root权限,为此用一个变通的办法,即利用ip表设置80端口的信息与3000端口互相转发,此转发在网卡层面,性能很高。方法如下:
      1. 输入sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
      2. 切换到root用户
      3. 输入iptables-save>/etc/iptables-rules
      4. 编辑/etc/network/interfaces文件,在最后一行插入:pre-up iptables-restore</etc/iptables-rules,实现开机自动配置
  • 相关阅读:
    (转载)C++ string中find() ,rfind() 等函数 用法总结及示例
    UVA 230 Borrowers (STL 行读入的处理 重载小于号)
    UVA 12100 打印队列(STL deque)
    uva 12096 The SetStack Computer(STL set的各种库函数 交集 并集 插入迭代器)
    uva 1592 Database (STL)
    HDU 1087 Super Jumping! Jumping! Jumping!
    hdu 1176 免费馅饼
    HDU 1003 Max Sum
    转战HDU
    hust 1227 Join Together
  • 原文地址:https://www.cnblogs.com/leegent/p/5612540.html
Copyright © 2011-2022 走看看