1.创建目录,按照习惯还是以.git为后缀。
banxi1988 :~/work/git_repo$ mkdir test.gitbanxi1988 :~/work/git_repo$ cd test.git/banxi1988 :~/work/git_repo/test.git$ git help initbanxi1988 :~/work/git_repo/test.git$ git init --bare Initialized empty Git repository in /home/banxi1988/work/git_repo/test.git/banxi1988 :~/work/git_repo/test.git$
请注意上面的init的参数 --bare,因为我们要向这个仓库进行提交。要是不使用这个参数。
提交的的话,就会遇到下面的错误。
remote: error: refusing to update checked out branch: refs/heads/masterremote: error: By default, updating the current branch in a non-bare repository
2.克隆出一个。
banxi1988 :~/work/git_repo$ git clone test.git/ test1.gitCloning into 'test1.git'...done.warning: You appear to have cloned an empty repository.banxi1988 :~/work/git_repo$ cd test1.git/banxi1988 :~/work/git_repo/test1.git$ ls
3.添加文件提交并push到原仓库
banxi1988 :~/work/git_repo/test1.git$ echo "init a Readme" > Readme.txtbanxi1988 :~/work/git_repo/test1.git$ lsReadme.txtbanxi1988 :~/work/git_repo/test1.git$ git add Readme.txtbanxi1988 :~/work/git_repo/test1.git$ git commit -m"add readme"[master (root-commit) 9009c7c] add readme 1 file changed, 1 insertion(+) create mode 100644 Readme.txtbanxi1988 :~/work/git_repo/test1.git$ git push origin master Counting objects: 3, done.Writing objects: 100% (3/3), 221 bytes, done.Total 3 (delta 0), reused 0 (delta 0)Unpacking objects: 100% (3/3), done.To /home/banxi1988/work/git_repo/test.git/ * [new branch] master -> masterbanxi1988 :~/work/git_repo/test1.git$ cd ..
4.再克隆一个仓库出来,然后再看看上面的提交是否如我们所期望的那样:
banxi1988 :~/work/git_repo$ git clone test.git/ test2.gitCloning into 'test2.git'...done.banxi1988 :~/work/git_repo$ cd test2.git/banxi1988 :~/work/git_repo/test2.git$ lsReadme.txtbanxi1988 :~/work/git_repo/test2.git$ cat Readme.txt init a Readmebanxi1988 :~/work/git_repo/test2.git$ git remote -v
git的提交跟svn相比我了一个暂存的过程,所以git的过程是。
修改-暂存-提交
对于已经add给版本控制的文件,可以在commit时带一个-a参数。来先暂存再提交。
对于git push orign master的解释:
将本地的master分支中的已经提交的修改push到orign远程仓库去,这里orign仓库即test.git,但是对于git来说
都叫做远程仓库。
使用git remote 命令就可查看对应的所有远程仓库:
banxi1988 :~/work/git_repo/test2.git$ git remote -vorigin /home/banxi1988/work/git_repo/test.git/ (fetch)origin /home/banxi1988/work/git_repo/test.git/ (push)banxi1988 :~/work/git_repo/test2.git$
5.我们在test2.中做些修改然后提交,push
banxi1988 :~/work/git_repo/test2.git$ vi Readme.txt banxi1988 :~/work/git_repo/test2.git$ cat Readme.txt init a Readmeadd a linebanxi1988 :~/work/git_repo/test2.git$ git commit -a -m"add a line"[master 176fe01] add a line 1 file changed, 1 insertion(+)banxi1988 :~/work/git_repo/test2.git$ git push origin master Counting objects: 5, done.Writing objects: 100% (3/3), 261 bytes, done.Total 3 (delta 0), reused 0 (delta 0)Unpacking objects: 100% (3/3), done.To /home/banxi1988/work/git_repo/test.git/ 9009c7c..176fe01 master -> masterbanxi1988 :~/work/git_repo/test2.git$
然后我们再到test1仓库去将test2提交的修改取回。
banxi1988 :~/work/git_repo/test1.git$ git status # On branch masternothing to commit (working directory clean)banxi1988 :~/work/git_repo/test1.git$ git pull remote: Counting objects: 5, done.remote: Total 3 (delta 0), reused 0 (delta 0)Unpacking objects: 100% (3/3), done.From /home/banxi1988/work/git_repo/test 9009c7c..176fe01 master -> origin/masterUpdating 9009c7c..176fe01Fast-forward Readme.txt | 1 + 1 file changed, 1 insertion(+)banxi1988 :~/work/git_repo/test1.git$ git status # On branch masternothing to commit (working directory clean)banxi1988 :~/work/git_repo/test1.git$ cat Readme.txt init a Readmeadd a linebanxi1988 :~/work/git_repo/test1.git$
从上面的操作过程注意到,与svn不同的是,使用git status来查看状态的时候,并不会反应给我们远程仓库的
状态。
上面我使用了git pull直接将 远程仓库的修改取回来并进行了合并。
如果仅仅是想获得回来,但是并不自动进行合并呢就可以使用git fetch命令。
有没有想到git pull跟svn update有点像呢?呵呵。
git pull,git fetch,git branch,git tag,
git的分支,打标签,留到下篇博文再给大家分享哈!