Pragmatic Version Control Using Git学习笔记
1:
工作目录树是版本库的一个断面;
可以通过初始化命令生成.git文件夹,则它的父目录就是版本库;也可以通过Clone一个已有的版本库,也就连带着创建了工作目录树
克隆一个已有的版本库,也就是穿件一个版本库的拷贝,并把Master Branch 的内容Check Out 到工作目录树
Check Out 是指更新工作目录树,使其与版本库中某个特定版本相同。
代码修改: 修改完之后,需要进行单元测试,之后 Commit 生成一个新的Revision Log Message Commit Message(这多半是指本地)
push到上游版本库(公共版本库)
Pull 远程版本库: 1: Fetch改动 2:Merge
创建分支: Master Branch 是开发的主线
合并分支: Git具有 Merge Tracking 功能 ;
Optimistic Locking: Joe 和Alice 都克隆了公共版本库到本地,并开始修改代码。 他们修改了同一文件的不同部分,Alice Push 他的修改入库,Joe之后,必须首先把新变化从公共版本库中Pull倒塌的本地版本库,Merge Conflicting 之后他他自己的修改Push到公共库
2:
git config --global user.name "wangshuai"
git config --global user.email "wangshuai901@gmail.com"
git config --global --list
git config --global color.ui "auto"
git自带机遇Tcl/Tk的图形界面
使用:
git add index.xml
git commit -m "add in asdasd"
git log输出:
commit c4a3fa6bf7f04f4b11e33bd9a9872a4171f6a764
Author: wangshuai <wangshuai901@gmail.com>
Date: Tue Jan 3 17:58:13 2012 -0800
add in hello world HTML
git status : 输出:
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.html
#
no changes added to commit (use "git add" and/or "git commit -a")
git已经检测到了修改,但还不知道如何处理。修改过的文件如果要提交,需要暂存(stage)修改。
三个存放代码的地方: 工作目录树; 暂存区; 版本库
git分支:
分值为要发布的代码保留一份拷贝。 让我想起了网管程序的61所稳定版和多通道开发版。。。
wangshuai@ubuntu:~/mysite$ git branch RB_1.0 master
wangshuai@ubuntu:~/mysite$ ls
index.html
切换分支
wangshuai@ubuntu:~/mysite$ git checkout
HEAD master RB_1.0
处理发布: 发布的时候,要为这个版本打上标签
git tag 1.0 RB_1.0
git tag
1.0
git checkout master
git rebase RB_1.0 编辑是把一条分之上的修改在另一条分支的末梢重现
git branch -d RB_1.0
删除发布分支,但是并没有删除tag 根据tag可以快速定位以前的RB版本
git branch RB_1.0.1 1.0
git checkout RB_1.0.1
git log --pretty-oneline
打包发布: 不许要吧历史记录(也即是Git版本库)一起发布
git archive --format-tar --prefix=mysite-1.0/ 1.0 | gzip > mysite-1.0.tar.gz 注意 1.0 指的是标签的名称
克隆版本库命令:
wangshuai@ubuntu:~/gitHubPro$ git clone git://github.com/tswicegood/mysite.git mysite-remote
Initialized empty Git repository in /home/wangshuai/gitHubPro/mysite-remote/.git/
remote: Counting objects: 12, done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 12 (delta 2), reused 0 (delta 0)
Receiving objects: 100% (12/12), done.
Resolving deltas: 100% (2/2), done.
wangshuai@ubuntu:~/gitHubPro$ ls
mysite-remote
为什么要暂存?
stage change 就是工作目录树中那些你打算提交到版本库中的变更 他会给用户在提交版本哭之前精心选择提交内容
明确指定那些需要提交,那些不需要: 通过git add 来实现
跟踪-》暂存-》提交
git add -i 可以选择暂存修改和 不存修改
git add -p 可以直接进入补丁模式 比较当前内容与 版本库中的差异,然后决定是否添加这些修改到版本库
4:
git status 查看工作目录树中所有的改动(只是表示出没文件有改动,不会分析是具体什么地方有改动。。。)
查看文件改动:
git diff 可以显示出工作目录树,暂存区以及版本库之间的差异
git diff 显示工作目录树中未被暂存的改动: 工作目录树与暂存区之间的差别
wangshuai@ubuntu:~/mysite$ git diff
diff --git a/index.html b/index.html
index f9fa879..3ce976a 100644
--- a/index.html
+++ b/index.html
@@ -8,6 +8,7 @@
</ul>
<ul>
<li><a href="contract.html">geography</a></li>
+ <li><a href="company.html">cmu</a></li>
</ul>
<body>
<h1>hello world!</h1>
git diff --cached
wangshuai@ubuntu:~/mysite$ git diff --cached
diff --git a/index.html b/index.html
index 929c402..f9fa879 100644
--- a/index.html
+++ b/index.html
@@ -6,6 +6,9 @@
<ul>
<li><a href="about.html">Biography</a></li>
</ul>
+<ul>
+ <li><a href="contract.html">geography</a></li>
+</ul>
<body>
<h1>hello world!</h1>
</body>
git diff HEAD 比较工作目录树 (包括暂存和未暂存修改) 与 版本库之间的差异:
wangshuai@ubuntu:~/mysite$ git diff HEAD
diff --git a/index.html b/index.html
index 929c402..3ce976a 100644
--- a/index.html
+++ b/index.html
@@ -6,6 +6,10 @@
<ul>
<li><a href="about.html">Biography</a></li>
</ul>
+<ul>
+ <li><a href="contract.html">geography</a></li>
+ <li><a href="company.html">cmu</a></li>
+</ul>
<body>
<h1>hello world!</h1>
</body>