使用git 進行版本控制

git介紹

Git是一個分佈式的版本控制工具,大家應該對git有概念,之前使用幾次git,但有段時間沒用了,現在權當筆記 記錄下來方便以後溫習。

Git最初被Linus Torvalds開發出來用於管理Linux內核的開發。每一個Git的工作目錄都是一個完全獨立的代碼庫,並擁有完整的歷史記錄和版本追蹤能力,

不依賴 於網絡和中心服務器。

git工作機理

Git 和其他版本控制系統的主要差別在於,Git 只關心文件數據的整體是否發生變化,而大多數其他系統則只關心文件內容的具體差異如CVS。Git 並不保存

這些前後變化的差異數據。實際上,Git 更像是把變化的文件作快照後,記錄在一個微型的文件系統中。每次提交更新時,它會縱覽一遍所有文件的指紋信

息並對文件作一快照,然後保存一個指向這次快照的索引,這是 Git 同其他系統的重要區別。如圖

                              

Git 使用 SHA-1 算法計算數據的校驗和,通過對文件的內容或目錄的結構計算出一個 SHA-1 哈希值,作爲指紋字符串,並將此結果作爲數據的唯一標識和索引。

Git 的工作完全依賴於這類指紋字串,所以你會經常看到這樣的哈希值。實際上,所有保存在 Git 數據庫中的東西都是用此哈希值來作索引的,而不是靠文件名。

git的所有操作都可以是本地的,僅僅在將新版本的內容上傳到服務器上時才需要連接網絡。

對於任何一個文件,在 Git 內都只有三種狀態:已提交(committed),已修改(modified)和已暫存(staged).

已提交表示數據已經安全存儲在本地數據庫,已修改表示已經修改了文件,但還沒有提交到數據庫,已暫存表示已經在當前版本標記了一個更改的文件,以便進入

下一次提交的快照(即把已經修改的文件放在下次提交時要保存的清單中)。參看下圖:

                                   

可見Git管理項目時,文件流轉的三個工作區域:Git 的本地數據目錄,工作目錄以及暫存區域。

Git directory(Git 的本地數據目錄):是Git保存元數據和對象數據庫的地方。這也是Git最重要的部分。

working directory(工作目錄):是項目某個版本的內容。

staging area(暫存區域):是一個簡單的文件,通常包含在Git目錄中。其中存儲了將要進入下一次提交的信息。

  基本的 Git 工作流程如下

  1. 在工作目錄(working directory)中修改某些文件。
  2. 對修改後的文件進行快照,然後保存到暫存區域(staging area)。
  3. 提交更新(commit),將保存在暫存區域(staging area)的文件快照永久轉儲到 Git 目錄中。

我們可以從文件所處的位置來判斷狀態:如果是 Git 目錄中保存着的特定版本文件,就屬於已提交狀態;如果作了修改並已放入暫存區域,就屬於已暫存狀態;

如果自上次取出後,作了修改但還沒有放到暫存區域,就是已修改狀態。

一張描述git數據遷移的示意圖,很清晰,對於理解git的命令很有幫助.

                         

git使用簡單舉例

1,創建項目  在github 用戶名旁邊有一個 create a new repo 的小圖標,假設新建項目名爲project。

2,創建本地新項目 並提交

$ mkdir  project//創建推送目錄
$ cd  project         //進入推送目錄    
$ git init       //設置該目錄爲推送
$ touch README   //生成readme
$ git add README //加入修改列表
$ git commit -m 'first commit' //遞交修改聲明
$ git remote add origin [email protected]:username/project.git //爲遠程Git更名爲origin, origin 在這裏就是[email protected]:username/project.git的一個別名

    // git remote add origin 若出現錯誤 fatal:remote origin already exists 則可以通過命令git remote rm origin刪除 已存在的origin。
$ git push -u origin master //推送此次修改 本地和遠程合併,本地默認分支爲master


git操作常見錯誤

1git push代碼時提示"Permission denied (publickey)"

  提交項目到github 當輸入 git push origin master 時出現如下錯誤:

   Permission denied (publickey).

   fatal: The remote end hung up unexpectedly

  解決方法: 

   這個錯誤說明 需要我們設置一個 ssh key

  stackoverflow上找到了解決方法,點這裏, 或者到官網 也有 Generating SSH Keys的教程,點這裏

2, git push出現 Repository not found.

   ERROR: Repository not found.
   fatal: The remote end hung up unexpectedly 

   個問題是因爲在你推送的github賬戶中,並沒有這個Repository。
   解決方法
 檢查自己的github中的Repository,檢查自己創建的目錄,必須要兩者一致(如果沒有項目 則需要創建項目  在用戶名旁邊有一個 create a new repo 的小圖標);

     或者先git clone下github中的Repository,然後再進行更改,這樣就一定一致了。

3好吧上面的問題解決了又出現問題

    ! [rejected] master -> master (non-fast-forward)

     error: failed to push some refs to ...

     通過錯誤提示:your current branch is behind its remote counterpart. merge th remote changes(e.g. ‘git pull’).

    可知原因在於:git倉庫中已經有一部分代碼,所以它不允許你直接把你的代碼覆蓋上去。

    解決方法

     有2個選擇方式:

  A,git pull

       先把git的東西fetch到你本地然後merge後再push。
       git fetch
       git merge
       這2句命令等價於
       git pull (' 如git pull origin master'就是將origin這個版本庫的代碼更新到本地的master主枝)
      但是在 使用命令 pull之前需要指定branch與merge可以通過修改 .git/config文件中的下列內容:
     [branch "master"]
           remote = origin
           merge = refs/heads/master
     也可以直接命令行修改
     git config branch.master.remote origin
     git config branch.master.merge ref/heads/master

     上面config修改後,鍵入命令 git pull origin master,  然後執行 git add,git commit, git push命令即可把需要新增的文件添加到github.

   B,強制推送(不建議使用,會覆蓋remote的內容)

       使用命令 git push -f 即可。

4, push的時候出現如下錯誤:
    fatal: remote error:  
    You can't push to git://github.com/user_name/user_repo.git  
    Use [email protected]:user_name/user_repo.git  

   解決方法
   注意提示,You can't push to git://github.com/user_name/user_repo.git 

   如果在git clone的時  用的是git://github.com:xx/xxx.git的形式, 那麼就會出現這個問題,因爲這個protocol(git://)是不支持push的.

   所以clone使用這種形式 :git clone [email protected]:user_name/user_repo.git.(然後git remote rm origin,git remote add ....)


統計一下搜到的資料

怎樣使用 GitHub ?http://www.zhihu.com/question/20070065

寫給Git初學者的7個建議  http://www.open-open.com/news/view/b7227e

Git使用基礎篇  http://www.open-open.com/lib/view/open1332904495999.html

Ubuntu 使用Git 使用舉例  http://www.cnblogs.com/yourihua/archive/2012/07/07/2580147.html

Pro Git 不錯的中文網站  http://iissnan.com/progit/html/zh/ch1_0.html

參考:

http://iissnan.com/progit/html/zh/ch1_0.html

http://blog.csdn.net/chain2012/article/details/7476493

發佈了108 篇原創文章 · 獲贊 810 · 訪問量 74萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章