创建本地版本库
选择合适的本地目录用来存放git本地版本库,我新建了mygit目录专门用来存放git相关。
➜ mygit pwd
/Users/zhoupengxiao/mygit
git init
git init命令用来创建一个空的git仓库,即.git目录
➜ mygit git init
Initialized empty Git repository in /Users/zhoupengxiao/mygit/.git/
➜ mygit git:(master)
.git目录下的内容如下所示,HEAD文件是master分支的引用,objects目录存放数据对象。
➜ .git git:(master) ls
HEAD branches config description hooks info objects refs
git add
新建了一个文件helloworld.pages,将该文件添加到本地git仓库:
➜ mygit git:(master) ✗ git add helloworld.pages
➜ mygit git:(master) ✗
执行git add命令之后,helloworld.pages还没真正添加到仓库,只是添加到了索引文件index file(即暂存区)。使用git add .
将工作目录的所有更改添加到暂存区。
git commit
➜ mygit git:(master) ✗ git commit -m "hello world"
[master (root-commit) 2e48ec3] hello world
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 helloworld.pages
执行git commit后,helloworld.pages才真正添加到了仓库。其中-m是本次提交的message信息。如果没有指定文件名的话,git commit会将暂存区所有的changes提交到仓库,若使用git commit filename -m "commit message"
会单独提交指定的文件。
.git解读
在git的提交环节,包含三个部分:working tree, index file, commit,分别对应工作目录working directory,暂存区staging area,本地仓库git repository。
staging area和git repository在.git目录下,staging area可以看作index,working directory是我们的工作空间,执行add操作将工作空间中的文件登记到index file中,staging area相当于是工作目录和本地仓库的过渡区域,可看做一个checkpoint。
下面这张图是在stackoverflow上看到的,可以帮我们从宏观上整体理解git:
常用命令
git status
我们执行git status命令来看下git的状态:
➜ mygit git:(master) ✗ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
.DS_Store
no changes added to commit (use "git add")
输出的信息显示,当前HEAD指向master分支,名为.DS_Store的文件状态是untracked,即没有被git追踪,没有使用git对该文件进行版本控制,提示使用git add来将该文件添加到git版本库中。
.gitignore配置
.DS_Store是Mac OS系统保存文件的自定义属性的隐藏文件,相当于windows中的.ini。这类本地文件是不需要进行版本控制的,类似的还有java编译后的class文件,java web项目中的classpath,这些文件不需要提交到git仓库中,但每次git status都要给我们列出来untracked files信息,强迫症的我不想看到它们怎么办呢?可以配置.gitignore文件让git忽略这些无需提交的文件。
新建.gitignore文本文件,放入git根目录,比如我本地/Users/zhoupengxiao/mygit/.gitignore
,将要忽略的文件名注册在.gitignore中,如
.DS_Store
*.class
其中可以使用*通配符,*.class表示当前路径下所有的class文件。
执行git add, git commit将.gitignore文件提交到git仓库。
再执行git status
➜ mygit git:(master) git status
On branch master
nothing to commit, working directory clean
可以看到工作目录已经是clean的了。