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>

 

posted @ 2012-01-04 16:46  王帅901  阅读(326)  评论(0编辑  收藏  举报