1.  参考文档

2.  安装与部署

2.1  命令行客户端

Mac下可以直接安装二进制包:OSX Installer for Git,当然也有其他的安装办法,有兴趣可以自行搜索。

2.2  图形客户端

随git发行版一般自带gitk和git gui,不过都是用的tk库做的界面,算是可用但不怎么好看。

Mac下我选用的是gitx,基本可以说是gitk的替代品,由于使用操作系统原生界面,用起来舒服很多。

3.  常用指令

3.1  commit

commit的时候需要加-a参数才会自动把受控的已修改文件包含在本次提交中。

3.2  修改最新一次提交

如果上一次commit的内容有遗漏或是有错误那咋办?如果要修正的正好是最新一次的commit,那么容易了,用git commit --amend指令,就可以将目录下的当前最新内容合并到上一次commit中去,并且可以同时修改上一次commit的注释说明。

3.3  建立临时网络版 git 服务

git 系统自带 daemon 指令,可以在 9418 端口启动一个无认证的 git 服务。客户端可以用类似 git-clone git://IP地址 这样的方式来启动。

3.4  将本地库上传到远程仓库

登录到远程的 git 服务器上,如 home 目录下,mkdir repo 。然后进入abc.git目录。git --bare init ,在服务器端建立一个空的 git 项目。

之后,在本地进入代码仓库所在目录。增加远程仓库:git remote -v 显示项目目前的远程仓库。git remote add origin ssh://127.0.0.1/~/repo 这样就增加了远程仓库 repo 。

最后,commit 提交本地代码,git push origin master 这样就把本地的 git 库上传到了远程服务器的 git 库中了。

3.5  让git自动忽略特定类型的文件

如临时文件,编译出来的二进制文件,通常我们是不希望放进版本库中去的。其中一种方法就是在目录下加入.gitignore文件,比如当前目录下.gitignore文件的内容是这样的:

# ignore objects and archives, anywhere in the tree.
*.[oa]
# ignore generated html files,
*.html
# except foo.html which is maintained by hand
!foo.html
这样当前目录下的.o和.a文件都会被自动忽略,.html文件除了foo.html之外,都会被自动忽略。详细用法可以参考man gitignore

3.6  让git把特定类型文件当作二进制文件处理

把二进制文件当作文本文件来管理有可能造成很大的麻烦,比如对实际文件内容的一点改动就会造成二进制文件多处的细碎修改,于是在提交到版本库的时候,会因为自动diff而无谓消耗大量处理时间。通过在版本库添加.gitattributes文件,可以把特定类型文件当作二进制文件来处理,从而避免无谓的diff操作。比如在文件中这样设置:

*.foo -crlf -diff -merge
意思就是对*.foo文件不自动做换行符格式转换、不参与diff、不自动进行merge。

4.  我的git简明用法

说实在这里记录的用法有点儿野路子,基本上是在拿类似Mercurial-hg的用法在用git。没办法,git强大的branch能力有时候实在永不明白,所以其实我这儿是尽量避免去使用branch相关的管理功能。也就是说,这样能用,但应该不是最优的用法。

  1. 用类似git clone REPO a这样的指令建立一个本地版本库,以后不在这个库中做任何修改,仅仅是经常git pull来获取最新的服务器更新。
    • 这样版本库a里面的内容总可以保持与最新的服务器内容一致,方便查看。
  2. 用类似git clone a b这样的指令给本地版本库a建立一个本地镜像b,用作修改,于是版本库b可以不受服务器端内容更新的影响。
    • 在版本库b上做自己的修改、更新,并commit
  3. 在版本库a上做git pull从服务器上获取最新更新。
  4. 在版本库b上做git pull a来开始merge过程。
    1. 冲突的文件会提示出来。
    2. 手工处理这些冲突的文件,其文件内容中 <<<<<<<< ======== >>>>>>>> 所分隔的部分就是冲突的代码,等号上方是本地的修改,等号下方是来自服务器的修改。
    3. 处理好冲突的文件之后,用git update-index指令更新本地索引,这样merge结果才能被commit
    4. 搞定了所有冲突文件,commit这一次的merge
  5. 在版本库a中做git pull b把本地修改弄过来。
  6. 在版本库a里面做git push提交到服务器。
GlossyBlue theme adapted by David Gilbert
Powered by PmWiki