歡迎您光臨本站 註冊首頁

面向 Subversion 用戶的 Git,第 1 部分: 入門指南

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  
分散式版本控制系統(DVCS)提供了大量優於集中式 VCS 的優點,對於嘗試研究 Subversion 模型的用戶,Git 是一個非常不錯的起點。這個共包含兩部分的系列文章的第 1 部分使用 Subversion 作為一個基準,展示了如何安裝 Git、設置一個遠程存儲庫,以及開始使用基本的 Git 命令。

對於任何不熟悉免費的開源版本控制系統(VCS)的人來說,Subversion 開始成為一種標準的非商業性質的 VCS,取代了舊的併發版本系統(Concurrent Versions System,CVS)。CVS 仍然適用於使用有限的場景,但是 Subversion 的魅力在於它只需要對 Web 伺服器進行少量設置。Subversion 的確存在一些問題,我也會在本文中進行討論,但是從大體上來說,它仍然是一種有效的系統。

那麼,為什麼還需要另一種系統呢?Git(大寫 G;git 是命令行工具)在許多方面要優於 Subversion。它是眾多分散式 VCS 中的一種。我自己使用過 Arch/tla,以及 Mercurial、Bazaar、darcs 和一些其他系統。在諸多因素的影響下(我將按照相關性進行討論),Git 變得很流行,並且經常被認為是和 Subversion 並列的用於個人和企業 VCS 的首選。

如果您是一名 Subversion 用戶的話,那麼有兩個重要的原因會使您對 Git 產生興趣。

  • 您嘗試遷移到 Git,因為 Subversion 在某種程度上會限制您。
  • 您對 Git 感到好奇,並且希望將它與 Subversion 進行比較。

好吧,也許還有第三個原因:Git 是一種比較熱門的技術,您希望將它寫到自己的簡歷中。我希望這並不是您的主要目標;學習 Git 是一名開發人員可以做的最有益的事情之一。即使您現在沒有用到 Git,這個分散式 VCS 所蘊含的概念和工作流對於未來 10 年中 IT 產業的大部分領域都是非常寶貴的知識,因為 IT 行業將在範圍和地理分佈方面發生重大的變革。

從根本上說,如果您不是一名 Linux 內核開發人員的話,可能算不上是一個有說服力的理由,但是內核以及大量其他重要項目都將使用 Git 進行維護,因此如果您計劃做出貢獻的話,那麼將需要熟悉它。

本文面向的是初中級 Subversion 用戶。需要具備初級 Subversion 知識和一些有關版本控制系統的一般知識。本文介紹的信息主要針對 UNIX® 類(Linux® 和 Mac OS X)系統用戶,並涉及少量針對 Windows® 用戶的知識。

本系列的第 2 部分將討論 Git 的更高級應用:合併分支、生成差異(diff)和其他常見任務。

Subversion 和 Git 基礎

在後文中,我將 “Subversion” 縮寫為 “SVN”,以便節省些時間並減少鍵盤磨損。

git-svn

您可能聽說過 git-svn,該工具讓您對 Subversion 存儲庫使用 Git。雖然在某些情況下它是有用的,但是該工具只能算是半分散式,並且 使用集中式 VCS 與切換到分散式 VCS 是不同的。

那麼,SVN 有哪些優勢?您可能已經有所了解,但是 VCS 與文件無關;它關注的是修改。SVN 運行在中央伺服器上,向它的數據存儲庫中添加修改,並在每次修改後為您提供一個快照。這個快照有一個修訂號;修訂號對於 SVN 以及 SVN 用戶非常重要。如果您在我之後繼續修改,那麼您必定會得到一個更高的修訂號。

Git 具有類似的目標 — 跟蹤修改 — 但是沒有使用集中式伺服器。這一差別非常關鍵。SVN 是集中式的,而 Git 是分散式的;因此,Git 不會提供一個逐漸變大的修訂號,因為不存在 “最新的修訂”。它仍然使用唯一的修訂 ID;只不過唯一修訂 ID 本身並沒有 SVN 修訂號那麼有用。

對於 Git,比較關鍵的操作不再是提交(commit);而是合併(merge)。任何人都可以克隆存儲庫並提交給 clone。存儲庫所有者可以選擇合併更改。或者,開發人員可以將修改推回到存儲庫中。我將只討論后一種情況,即經過授權的 push 模型。





在 SVN 下放置一個目錄

讓我們從一個簡單的示例開始:使用 SVN 跟蹤目錄的內容。將需要一個 SVN 伺服器,當然,還需要一個文件目錄,以及該伺服器上的一個帳戶,並能夠通過至少一種方式進行提交。在開始之前,首先添加並提交目錄:


清單 1. 在 SVN 下設置一個目錄
				  % svn co http://svnserver/...some path here.../top  % cd top  % cp -r ~/my_directory .  % svn add my_directory  % svn commit -m 'added directory'  			

這些操作有什麼作用?現在,您可以從這個目錄中獲得已提交文件的最新版本,重命名它們,創建新的文件或目錄,將更改提交到現有文件,等等:


清單 2. SVN 下的基本文操作
				  # get latest  % svn up  # what's the status?  % svn st  # delete files  % svn delete  # rename files (really a delete + add that keeps history)  % svn rename  # make directory  % svn mkdir  # add file  % svn add  # commit changes (everything above, plus any content changes)  % svn commit  			

我不會詳細解釋這些命令,但是需要牢記它們。要獲得有關這些命令的幫助,只需要輸入 svn help COMMAND,Subversion 將顯示一些基本幫助;可以從參考手冊中了解更多。





在 Git 下放置一個目錄

我將遵循和 SVN 示例相同的思路。和前面一樣,我假設您已經具有一個填充了數據的目錄。

對於遠程伺服器,我將使用免費的 github.com 服務,當然,您也可以設置自己的伺服器。使用 GitHub 可以很輕鬆地處理遠程 Git 存儲庫。在撰寫本文時,對於免費帳戶,數據被限制為 300MB,您的存儲庫必須是公開的。我註冊了一個用戶名為 “tzz” 的帳戶,並創建了名為 “datatest” 的公共存儲庫;可以隨便使用它。我生成了一個公共 SSH 鍵;如果您還沒有的話,那麼應當生成一個鍵。 您可能還希望嘗試 Gitorious 伺服器或 repo.or.cz。您將在 git.or.cz Wiki 上找到一長串 Git 宿主服務(從 參考資料 部分可獲得鏈接)。

GitHub 的一個優點就是它非常友好。它會準確地告訴您需要哪些命令來設置 Git 並初始化庫。我將向您介紹這些內容。

首先,需要安裝 Git,Git 安裝在每個平台上都有所不同,然後對它執行初始化。Git 下載頁面(見 參考資料)列出了大量與平台有關的選項。(在 Mac OS X 上,我使用 port install git-core 命令,但是您需要首先設置 MacPorts。Git 下載頁面還提供了一個獨立的 MacOS X Git 安裝程序鏈接;這個工具可能更適合大多數人使用)。

一旦安裝完畢后,使用下面的命令進行初步設置(當然,選擇您自己的用戶名和電子郵件地址):


清單 3. 基本 Git 設置
				  % git config --global user.name "Ted Zlatanov"  % git config --global user.email "tzz@bu.edu"  			

您已經觀察到與 SVN 的一個不同之處;在 SVN 中,您的用戶身份屬於伺服器端,並且您的身份由伺服器決定。在 Git 中,您可以是 Wittgenstein 的那隻奇妙的猴子,如果您願意的話(我剋制著這種誘惑)。

接下來,我將設置數據文件並使用它們初始化我的存儲庫。(GitHub 還將從一個公共 SVN 存儲庫導入,這將非常有幫助)。


清單 4. 目錄設置和首次提交
				  # grab some files  % cp -rp ~/.gdbinit gdbinit  % mkdir fortunes  % cp -rp ~/.fortunes.db fortunes/data.txt  # initialize  % git init  # "Initialized empty Git repository in /Users/tzz/datatest/.git/"  # add the file and the directory  % git add gdbinit fortunes  % git commit -m 'initializing'  #[master (root-commit) b238ddc] initializing  # 2 files changed, 2371 insertions(+), 0 deletions(-)  # create mode 100644 fortunes/data.txt  # create mode 100644 gdbinit  

在上面的輸出當中,Git 向我們顯示有關文件模式的信息;100644 表示這些文件的許可權的八進位版本。您不需要更新這些內容,但是 2371 insertions 有些費解。它只修改兩個文件,不是嗎?這個數字實際上指的是插入的行的數量。當然,我們沒有刪除任何行。



[火星人 ] 面向 Subversion 用戶的 Git,第 1 部分: 入門指南已經有826次圍觀

http://coctec.com/docs/linux/show-post-68770.html