您的位置:首页 > 其它

pro git 学习<一>

2014-01-06 11:23 447 查看

Git基础

配置

git config

/etc/gitconfig文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
~/.gitconfig文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
当前项目的 git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

用户信息

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

文本编辑器

$ git config --global core.editor vim


差异分析工具

$ git config --global merge.tool vimdiff

查看配置信息

git config --list
有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。
$ git config user.name
Scott Chacon

获取帮助

$ git help <verb>
$ git <verb> --help
$ man git-<verb>

$ git help config


常用命令

从当前目录初始化

$ git init
初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。不过目前,仅仅是按照既有的结构框架初始化好了里边所有的文件和目录,但我们还没有开始跟踪管理项目中的任何一个文件。

从现有仓库克隆

$ git clone git://github.com/schacon/grit.git


如果希望在克隆的时候,自己定义要新建的项目目录名称,可以在上面的命令最后指定:
$ git clone git://github.com/schacon/grit.git mygrit
唯一的差别就是,现在新建的目录成了 mygrit

检查当前文件状态

$ git status
# On branch master
nothing to commit (working directory clean)

跟踪新文件

$ git add README
运行 git add 命令(这是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等)。
运行了 git add 之后又作了修订的文件,需要重新运行 git add 把最新版本重新暂存起来。

忽略某些文件

一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,像是日志或者编译过程中创建的等等。我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。
$ cat .gitignore
*.[oa]
*~
第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的,我们用不着跟踪它们的版本。第二行告诉 Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。

文件 .gitignore 的格式规范如下:

所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
可以使用标准的 glob 模式匹配。
匹配模式最后跟反斜杠(/)说明要忽略的是目录。
要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

# 此为注释 – 将被 Git 忽略
*.a       # 忽略所有 .a 结尾的文件
!lib.a    # 但 lib.a 除外
/TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/    # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

查看已暂存和未暂存的更新

$ git diff
比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。

$ git diff --cached
若要看已经暂存起来的文件和上次提交时的快照之间的差异

提交更新

$ git commit
这种方式会启动文本编辑器以便输入本次提交的说明,使用 git config --global core.editor 命令设定你喜欢的编辑软件。

$ git commit -m "Story 182: Fix benchmarks for speed"

使用 -m 参数后跟提交说明的方式,在一行命令中提交更新。
提交时记录的是放在暂存区域的快照,任何还未暂存的仍然保持已修改状态,可以在下次提交时纳入版本管理。每一次运行提交操作,都是对你项目作一次快照,以后可以回到这个状态,或者进行比较。

跳过使用暂存区域

$ git commit -a -m 'added new benchmarks'

移除文件

$ git rm grit.gemspec
提交的时候,该文件就不再纳入版本管理了。如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f

$ git rm --cached readme.txt
我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,仅是从跟踪清单中删除。比如一些大型日志文件或者一堆 .a 编译文件,不小心纳入仓库后,要移除跟踪但不删除文件,以便稍后在 .gitignore 文件中补上

$ git rm \*~
递归删除当前目录及其子目录中所有 ~ 结尾的文件。

移动文件

$ git mv file_from file_to
其实,运行 git mv 就相当于运行了下面三条命令:

$ mv README.txt README
$ git rm README.txt
$ git add README

查看提交历史

$ git log


$ git log –p -2
-p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新。

$ git log --stat
还有许多摘要选项可以用,--stat,仅显示简要的增改行数统计

$ git log --pretty=oneline
--pretty 选项,可以指定使用完全不同于默认格式的方式展示提交历史

$ git log --pretty=format:"%h - %an, %ar : %s"
format,可以定制要显示的记录格式

其他常用的选项及其释义。

选项 说明

-p 按补丁格式显示每个更新之间的差异。

--stat 显示每次更新的文件修改统计信息。

--shortstat 只显示 --stat 中最后的行数修改添加移除统计。

--name-only 仅在提交信息后显示已修改的文件清单。

--name-status 显示新增、修改、删除的文件清单。

--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。

--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。

--graph 显示 ASCII 图形表示的分支合并历史。

--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller

如果要查看 Git 仓库中,2008 年 10 月期间,Junio Hamano 提交的但未合并的测试脚本(位于项目的 t/ 目录下的文件),可以用下面的查询命令:
$ git log --pretty="%h:%s" --author=gitster --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/

修改最后一次提交

$ git commit --amend
此命令将使用当前的暂存区域快照提交。如果刚才提交完没有作任何改动,直接运行此命令的话,相当于有机会重新编辑提交说明,而所提交的文件快照和之前的一样。
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
上面的三条命令最终得到一个提交,第二个提交命令修正了第一个的提交内容。

取消已经暂存的文件

git reset HEAD benchmarks.rb

取消对文件的修改

git checkout -- benchmarks.rb

远程仓库的使用

查看当前的远程库

$ git remote
$ git remote -v
-v 选项(译注:此为 --verbose 的简写,取首字母),显示对应的克隆地址

添加远程仓库

$ git remote
origin
$ git remote add pb git://github.com/paulboone/ticgit.git
$ git remote -v
origin  git://github.com/schacon/ticgit.git
pb  git://github.com/paulboone/ticgit.git
git remote add [shortname] [url]
添加远程仓库后,要push本地仓库到远程仓库中

从远程仓库抓取数据

$ git fetch [remote-name]
命令会到远程仓库中拉取所有你本地仓库中还没有的数据。

推送数据到远程仓库

git push [remote-name] [branch-name]


$ git push origin master

查看远程仓库信息

git remote show [remote-name]

$ git remote show origin

远程仓库的删除和重命名

$ git remote rename pb paul
$ git remote
origin
paul
对远程仓库的重命名,也会使对应的分支名称发生变化,原来的 pb/master 分支现在成了 paul/master。
$ git remote rm paul


打标签

$ git tag
v0.1
v1.3


$ git tag -l 'v1.4.2.*'
v1.4.2.1
v1.4.2.2
v1.4.2.3
v1.4.2.4

新建标签

Git 使用的标签有两种类型:轻量级的(lightweight)和含附注的(annotated)。轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。而含附注标签,实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使用 GNU Privacy Guard (GPG) 来签署或验证。一般我们都建议使用含附注型的标签,以便保留相关信息;当然,如果只是临时性加注标签,或者不需要旁注额外信息,用轻量级标签也没问题。

含附注的标签

$ git tag -a v1.4 -m 'my version 1.4'
创建一个含附注类型的标签非常简单,用 -a (译注:取 annotated 的首字母), -m 选项则指定了对应的标签说明,Git 会将此说明一同保存在标签对象中。

轻量级标签

$ git tag v1.4-lw

轻量级标签实际上就是一个保存着对应提交对象的校验和信息的文件。要创建这样的标签,一个 -a,-s 或 -m 选项都不用,直接给出标签名字即可

后期加注标签

$ git tag -a v1.2 9fceb0

分享标签

git push origin v1.5

默认情况下,git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。其命令格式如同推送分支,运行 git push origin [tagname]

$ git push origin --tags
如果要一次推送所有(本地新增的)标签上去,可以使用 --tags 选项

Git 命令别名

$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status


待续
---------------------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: