这两天突然对github非常感兴趣。因为想弄个博客放些资料和文章上去。于是趁华为云搞活动,以超便宜的价格租了个ECS。
网页产生用的是hexo,写作完全用markdown的方式,这样也就不用在排版上花时间了。
而数据的更新是用过git的方式。
网上关于git入门的书籍很多,下载了一本《github入门与实践》,作者是日本大塚弘记。用了一晚上的时间,翻阅了前四章。感觉就是后悔啊—后悔没早点学git,可以少走不少弯路。
目前,在公司基本是流程,项目一把抓。copy虽然简单快捷。但是随着项目的增多,或者同一个项目,又有多个try run的版本。flow中的bug改了之后,很有可能又因为copy的不是最新的,或者是在一个try run版本改了,在另外的try run版本又需要进行同样的动作,无形中进行了很多重复劳动。
通过简单的实操,初步掌握了git的使用方法。
用git进行流程管理
这里,回忆一下git的基本操作,同时考虑一下我在项目中将怎么使用它。
首先,建立一个空的仓库。
假设目录为 /home/repo/flow
cd /home/repo/flow
git init --bare
这里面的—bare是一定不能省的。否则,建立的repository(仓库)就只能clone,而不能在clone的repository进行。这样也就违反我的初衷,因为我需要对不同的项目建立不同的子仓库的修改,都要能够push到这个总的仓库中来。
这里假设有两个项目需要同时进行, projectA, projectB。
对于项目A, 我们将环境通过clone的方式copy到本地。
git clone /home/repo/flow ProjectA
对于项目B, 我们将环境通过clone的方式copy到本地。
git clone /home/repo/flow ProjectB
现在ProjectA & ProjectB就有了我们所需要的的环境,包括目录结构,各种脚本。
现在,在ProjectA中,比如我们修改了某个文件,比如fileB,那么我只需要commit这一个文件的修改。
git edit fileB
git commit -m "message"
git push
那么在projectB中,就需要git pull, 把仓库中的更新更改到本地。
由于项目总有很多结果文件,log文件,这些文件就不要add了。保持仓库的干净。
另外,由于存在不同的process,metal stack的配置,我们可以对仓库创建不同的分支。
对不同配置的项目,就可以clone不同的分支。
如果一次修改导致错误,可以回溯到之前的任意时间点和分支。
最后,对于不同的分支,还可以进行merge。在merge的时候,就需要认真的比对。对于这些不同的配置,完全可以通过swich语句或者if else语句进行merge。
基本操作
-
git init —- 初始化仓库
-
git status —- 查看仓库状态
-
git add —- 向暂存区中添加文件
-
git commit —- 保存仓库的历史记录
-
git log —- 查看提交日志
-
git diff —- 查看更改前后的差别
分支操作
-
git branch —- 显示分支一览表
-
git checkout -b —- 创建、切换分支
-
git merge —- 合并分支
更改提交的操作
-
git reset —- 回溯历史版本
-
git commit —amend —- 修改提交信息
-
git rebase -i —- 压缩历史
推送至远程仓库
-
git remote add —- 添加远程仓库
-
git push — 推送
从远程仓库获取
-
git clone — 获取远程仓库
-
git pull —- 获取最新的远程仓库分支