2011-11-19 119 views
0

我剛開始玩弄git(來自SVN),我確信我沒有以正確的方式思考 - 我從github克隆了一個倉庫,並從中刪除了標籤並添加了我自己的倉庫。但是當我做一個git狀態或git diff時,它表示沒有任何提交。它不應該與我從克隆的github項目進行比較嗎?我正在想這是我所知道的錯誤方式,但也許有人可以幫我把這個包裹起來。添加/刪除標籤不會顯示在git status或git diff?

回答

0

看着這個錯誤的方式。

你需要做的是忘記你對svn的瞭解。在svn中,你有一個倉庫,它位於服務器上。您更改文件並提交它們的增量。

然而,在你的計算機上有一個倉庫。如果你願意,你也可以在github上找到一個。其他人在您的項目上工作也將擁有自己的存儲庫。請注意我說的知識庫。是!庫!這意味着你的計算機中擁有所有的歷史記錄。你可以在你自己的計算機上提交,創建標籤,分支,合併,所有內容,而不用在github中觸摸任何東西。

歡迎使用分佈式版本控制系統。

與svn的另一個區別是,你沒有看到提交作爲增量,但你看到每個提交作爲你項目的整個文件集。因此,例如svn的奇怪合併(你說合並這個修訂版本和我的文件修訂版本之間的區別)在git中不存在。您只需合併該項目的快照即可。

然後提交意味着將更改提交到您的文件到您自己的存儲庫。創建標籤是另一個過程。一個不會改變你的文件的過程(與創建標籤意味着複製文件的svn不同)。 git中的標籤只是指向特定提交的指針!

所以,你想要做的是兩種不同的東西:

  • 提交:提交資料庫修改。該命令是

    git commit 
    

    您可以將文件添加到與git add some_file提交和提交更改的只是一部分,你的源代碼(這東西你不使用svn獲得)。或者,如果您要提交所有更改的文件,請添加-a選項。

  • 推送:推送發送到另一個存儲庫,讓我們說一個遠程存儲庫,名爲origin(指向github),所有你在自己的倉庫中。這包括所有提交,並且如果您指定-tags也是您創建的標籤。例如:

    git push origin master -tags 
    

或者,當你想更新你的資料庫,從起源,你首先:

  • 取:更新你的資料庫到遠程之一。著名的:

    git fetch origin 
    

    由此帶來的所有新提交和存在於origin標籤,但不是你的本地倉庫。

  • 合併:然後更新您的主分支遠程年代:

    git merge remotes/origin/master 
    

所以回到你的情況下,沒有沒有什麼承諾,但也有您需要按標籤。最後要告訴你的是,當你刪除標籤時,你只能從自己的存儲庫中刪除它們。爲了從遠程刪除:

git push origin :refs/tags/tag_name 

理解這種語法需要更多一點的混帳推高級教程,但現在接受這一點。請注意,刪除標籤強烈不滿。這是因爲如果有人下載該標籤並開始使用該標籤並依賴該標籤,那麼如果她需要該標籤,她以後就無法再找到該標籤。因此,在創建標籤時,確保軟件/庫符合您的要求。

0

標籤指向其他對象它git(通常提交)。如果刪除標籤(通常不應該添加)或添加它們,則不會添加屬於提交的任何內容,因此不需要提交任何內容。您可能需要閱讀the git object model