Git的相關學習

起步

1.git的安裝

2.初次運行git前的配置

Git 提供了一個叫做 git config 的工具(譯註:實際是 git-config 命令,只不過可以通過 git 加一個名字來呼叫此命令。),專門用來配置或讀取相應的工作環境變量。

注:當前項目的 Git 目錄中的配置文件(也就是工作目錄中的 .git/config文件):這裏的配置僅僅針對當前項目有效。每一個級別的配置都會覆蓋上層的相同配置,所以 .git/config裏的配置會覆蓋 /etc/gitconfig 中的同名變量

2.1用戶信息

第一個要配置的是你個人的用戶名稱和電子郵件地址。這兩條配置很重要,每次 Git 提交時都會引用這兩條信息,說明是誰提交了更新,所以會隨更新內容一起被永久納入歷史記錄:

$ git config --global user.name "John Doe"
$ git config --global user.email [email protected]

git基礎

1.取得git倉庫

1.1在工作目錄中初始化新倉庫

要對現有的某個項目開始用 Git 管理,只需到此項目所在的目錄,執行:

$ git init

如果當前目錄下有幾個文件想要納入版本控制,需要先用 git add 命令告訴 Git 開始對這些文件進行跟蹤,然後提交:

$ git add *.c
$ git add README
$ git commit -m 'initial project version'
1.2 從現有的倉庫克隆

克隆倉庫的命令格式爲 git clone [url]。比如,要克隆 Ruby 語言的 Git 代碼倉庫 Grit,可以用下面的命令:

$ git clone git://github.com/schacon/grit.git

這會在當前目錄下創建一個名爲grit的目錄,其中包含一個.git的目錄,用於保存下載下來的所有版本記錄,然後從中取出最新版本的文件拷貝。
如果希望在克隆的時候,自己定義要新建的項目目錄名稱,可以在上面的命令末尾指定新的名字:

$ git clone git://github.com/schacon/grit.git mygrit

唯一的差別就是,現在新建的目錄成了 mygrit,其他的都和上邊的一樣。

2記錄每次更新到倉庫

2.1檢查當前文件狀態
$ git status
On branch master
nothing to commit, working directory clean

現在讓我們用 vim 創建一個新文件 README,保存退出後運行 git status 會看到該文件出現在未跟蹤文件列表中:

$ vim README
$ git status
On branch master
Untracked files:
 (use "git add <file>..." to include in what will be committed)

       README

nothing added to commit but untracked files present (use "git add" to track)
2.2跟蹤新文件

運行:

$ git add README

此時再運行 git status命令,會看到 README 文件已被跟蹤,並處於暫存狀態:

$ git status
On branch master
Changes to be committed:
 (use "git reset HEAD <file>..." to unstage)

       new file:   README
2.3暫存已修改文件

現在我們修改下之前已跟蹤過的文件 benchmarks.rb,然後再次運行 status 命令

$ git status
On branch master
Changes to be committed:
 (use "git reset HEAD <file>..." to unstage)

       new file:   README

Changes not staged for commit:
 (use "git add <file>..." to update what will be committed)
 (use "git checkout -- <file>..." to discard changes in working directory)

       modified:   benchmarks.rb

文件benchmarks.rb出現在 “Changes not staged for commit” 這行下面,說明已跟蹤文件的內容發生了變化,但還沒有放到暫存區。
運行 git addbenchmarks.rb放到暫存區,然後再看看 git status 的輸出:

$ git add benchmarks.rb
$ git status
On branch master
Changes to be committed:
 (use "git reset HEAD <file>..." to unstage)

       new file:   README
       modified:   benchmarks.rb

備註:運行了 git add之後如果又作了修訂的文件,需要重新運行git add把最新版本重新暫存起來

2.4 忽略某些文件

我們可以創建一個名爲.gitignore的文件,列出要忽略的文件模式。來看一個實際的例子:

$ cat .gitignore
*.[oa]
*~

第一行告訴 Git 忽略所有以.o.a結尾的文件;第二行告訴 Git 忽略所有以波浪符(~)結尾的文件。此外,你可能還需要忽略logtmp或者pid 目錄,以及自動生成的文檔等等。要養成一開始就設置好 .gitignore文件的習慣,以免將來誤提交這類無用的文件。

文件 .gitignore 的格式規範如下:

  • 所有空行或者以註釋符號 # 開頭的行都會被 Git 忽略。
  • 可以使用標準的 glob 模式匹配。
  • 匹配模式最後跟反斜槓(/)說明要忽略的是目錄。
  • 要忽略指定模式以外的文件或目錄,可以在模式前加上驚歎號(!)取反。

我們再看一個 .gitignore 文件的例子:

# 此爲註釋 – 將被 Git 忽略
# 忽略所有 .a 結尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 僅僅忽略項目根目錄下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目錄下的所有文件
build/
# 會忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目錄下所有擴展名爲 txt 的文件
doc/**/*.txt
2.5查看已暫存和未暫存的更新

如果要查看具體修改了什麼地方,可以用 git diff命令
若要看已經暫存起來的文件和上次提交時的快照之間的差異,可以用 git diff --cached 命令。(Git 1.6.1 及更高版本還允許使用 git diff --staged,效果是相同的,但更好記些。)來看看實際的效果:

2.6提交更新

每次準備提交前,先用 git status看下,是不是都已暫存起來了,然後再運行提交命令 git commit.
這種方式會啓動文本編輯器以便輸入本次提交的說明(使用 git config --global core.editor 命令設定你喜歡的編輯軟件)
另外也可以用 -m 參數後跟提交說明的方式,在一行命令中提交更新:

$ git commit -m "Story 182: Fix benchmarks for speed"
[master 463dc4f] Story 182: Fix benchmarks for speed
 2 files changed, 3 insertions(+)
 create mode 100644 README
2.7跳過使用暫存區域

儘管使用暫存區域的方式可以精心準備要提交的細節,但有時候這麼做略顯繁瑣。Git 提供了一個跳過使用暫存區域的方式,只要在提交的時候,給 git commit加上 -a 選項,Git 就會自動把所有已經跟蹤過的文件暫存起來一併提交,從而跳過 git add 步驟:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   benchmarks.rb

no changes added to commit (use "git add" and/or "git commit -a")
$ git commit -a -m 'added new benchmarks'
[master 83e38c7] added new benchmarks
 1 files changed, 5 insertions(+)
2.8移除文件

要從 Git 中移除某個文件,就必須要從已跟蹤文件清單中移除(確切地說,是從暫存區域移除),然後提交。可以用git rm命令完成此項工作,並連帶從工作目錄中刪除指定的文件,這樣以後就不會出現在未跟蹤文件清單中了
果只是簡單地從工作目錄中手工刪除文件,運行 git status時就會在 “Changes not staged for commit” 部分(也就是未暫存清單)看到:

$ rm grit.gemspec
$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    grit.gemspec

no changes added to commit (use "git add" and/or "git commit -a")

然後再運行git rm記錄此次移除文件的操作:

$ git rm grit.gemspec
rm 'grit.gemspec'
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        deleted:    grit.gemspec

最後提交的時候,該文件就不再納入版本管理了。如果刪除之前修改過並且已經放到暫存區域的話,則必須要用強制刪除選項-f(譯註:即 force 的首字母),以防誤刪除文件後丟失修改的內容.

另外一種情況是,我們想把文件從 Git 倉庫中刪除(亦即從暫存區域移除),但仍然希望保留在當前工作目錄中。換句話說,僅是從跟蹤清單中刪除。比如一些大型日誌文件或者一堆.a編譯文件,不小心納入倉庫後,要移除跟蹤但不刪除文件,以便稍後在.gitignore文件中補上,用 --cached選項即可:

$ git rm --cached readme.txt

後面可以列出文件或者目錄的名字,也可以使用 glob 模式。

2.9移動文件

在 Git 中對文件改名,可以這麼做:

$ git mv README.txt README
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        renamed:    README.txt -> README

其實,運行 git mv 就相當於運行了下面三條命令:

$ mv README.txt README
$ git rm README.txt
$ git add README
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章