主要内容:
获取git / 配置git
建立项目仓库/ 本地创建 / 从远程库获取
添加更新文件
忽略某些文件
检查文件状态 / 版本比较
获取Git
$apt-get install git
Git相关的环境变量可存放于以下三个位置:
/etc/gitconfig:系统级别 git config --system
~/.gitconfig: 当前用户 git config --global
.git/config 文件:当前项目
每一个级别的配置都会覆盖上层的相同配置,所以.git/config 里的配置会覆盖/etc/gitconfig 中的同名变量。
首先要配置的是用户名和邮箱,每次Git提交的时候会引用此信息:
$git config --global user.name "Nwahs"
$git config --global user.email example@gmail.com
配置文本编辑器:
$ git config --global core.editor vim
配置文本比较工具:
$ git config --global merge.tool vimdiff
完成后查看配置文件:
$ cat ~/.gitconfig
[color]
ui = auto
[core]
editor = vim
[user]
name = Nwahs
email = example@gmail.com
查看当前配置
sahwn@EP43:~/IdeaProjects/untitled$ git config --list
color.ui=auto
core.editor=vim
user.name=Nwahs
user.email=example@gmail.com
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
查看帮助文档:
$git --help
$git help add
----------------------------------------------------
建立项目仓库(Repository):
情形1 如果已有项目:
进入项目目录,如下命令,会生成.git目录
$ git init
添加文件到版本控制:
$ git add *.java
这样文件就进入到 Staging Area
如果想从版本控制中去除文件(不删除文件本身),使用如下命令:
$ git rm --cached [-fr] <dir/file>
被撤销的文件将不会被commit进入到本地repository
提交入库:
$ git commit -m "message"
上传本地库至代码托管网址:
$ git remote add origin https://nwahs@example.org/git/nawhs.git
$ git push -u origin --all
Password for 'https://nwahs@example.org':
To https://nwahs@example.org/git/nawhs.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
$ git push -u origin --tags
Password for 'https://nwahs@example.org':
Everything up-to-date
$ git clone git://github.com/schacon/grit.git
也可以指定clone到本地某文件夹:
$ git clone git://github.com/schacon/girt.git my_dir
忽略某些文件:
有3种方法可以实现 $HOME/.config/git/ignore, $GIT_DIR/info/exclude, .gitignore,这里用最后一种。
创建.gitignore 文件,当前目录及子目录下所有符合其规定的文件都将被忽略。
如果子目录也有此配置文件,则会覆盖上级目录的配置。更详尽的读取顺序,请参考:http://git-scm.com/docs/gitignore
一些规范和例子:
0 只针对untracked文件
1 所有空行和#开头的行无视之
2 !取反,之前被忽略的文件可以重新被包括进来。
但是如果某文件的某个父目录被忽略的话,此条对其无效。
# 此为注释 – 将被 Git 忽略
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
所以当只包括foo/bar目录时,应如下:
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
3 最后跟反斜杠(/)说明要忽略的是目录。
4 星号(*)匹配零个或多个任意字符;
[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如[0-9] 表示匹配所有 0 到 9 的数字)。
问号(?)只匹配一个任意字符;
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
\!important!.txt # 表示!important!.txt不会被忽略
6 **可以任意匹配
**/foo #可匹配目录下所有名字为foo的文件或目录,比如a/b/foo,c/foo/,c/d/foo
foo/** #匹配foo目录下所有文件和目录
a/**/b #可匹配 a/x/y/b,或者a/z/b等
检查当前文件状态:
$ git status
详情参考:http://blog.jobbole.com/25808/
修改后的文件,同样使用如下命令进行Stage
$ git add benchmarks.rb
查看状态更新:
检查已修改(modified)的文件同已暂存(staged)的文件的区别,
即working dir 和 staging area的区别:
$ git diff
检查已暂存(staged)的文件和上次提交(commited)的区别:
$ git diff --cached
跳过暂存区进行提交, Git会将所有track的文件一起暂存并提交:
$ git commit -a -m 'added new benchmarks'
//-----------------------------
参考文章:http://blog.jobbole.com/25775/