2017-04-23 74 views
-1

這是我第一次使用GIT,所以我有幾個基本問​​題。GIT - 如何處理儲存庫,我在哪裏可以找到我的分支

1)假設我有一個名爲「Projects」的文件夾,裏面有20個不同的客戶端項目等等。其中「Project-1」和「Project-2」。

我應該在哪裏建立我的存儲庫? 「項目」還是我應該分別從每個文件夾中創建一個存儲庫?

2)好的,我做了一個回購。現在我想成爲一個分支,我成功了。現在我可以在哪裏看到我的分支文件?我期望在回購中有不同的文件夾 - 包括主分支和我一路創建的其他文件夾。

+0

針對不同分支的不同文件夾! **愚蠢的SVN ** – mallaudin

回答

1

1)通常的做法是爲不同的項目分開使用Git倉庫。這意味着您可以單獨開發每個項目,而不必擔心覆蓋您對一個項目所做的更改,如果必須將更改還原到另一個項目。

2)如果您是Git的新手,我暫時不會擔心分支。如果您創建分支,則不會在單獨的文件夾中看到它們。跟蹤分支的魔法隱藏在每個存儲庫中的.git文件夾中。

您可以通過輸入git branch來查看您正在使用哪個分支。您可以使用git branch -a查看所有分行。

+0

謝謝,這解釋了很多。只是要說清楚(我必須與分支機構已經合作): 假設我有兩個分支 - 「主」和「備用」。 我這樣做:'git checkout alternate'並在file.txt中添加一行(我不承諾)。 然後我這樣做:'git checkout master',再次打開該文件 - 爲什麼我會看到更改,如果我是主人? 我假設我可以在我的編輯器中打開2個版本的file.txt並查看其中的差異,但似乎並沒有這樣工作。 – oneday

+0

如果你想切換回主並覆蓋你的本地狀態,你可以使用''''git checkout -f -b branchname'''。這將檢出您的回購的主版本,並覆蓋文件系統上任何不匹配的文件。請注意這一點,因爲它有可能失去你所做的改變。如果您想保留任何更改,請務必在切換之前將它們提交到當前分支。您也可以使用''''git checkout filename'''來恢復單個文件,使其與當前分支中的版本匹配。 – John

+1

@oneday如果您在備用分支上提交更改並且簽出主分支,您將看不到新代碼。但是,未分階段的更改將在分支之間移動,因爲它們未附加到特定的分支。如果你想在沒有提交更改的情況下籤出不同的分支,我建議在切換分支之前存儲更改。 – gerard

3

你很明顯會來自svn的git,或者 svn。

在svn中,一切都基於文件夾 - 分支,標記和存儲庫都成爲文件夾;回購中的每個子文件夾都可以有效地成爲自己的回購等。

根據我的經驗,這種版本控制模型對於svn來說是獨一無二的。您不能在其他地方應用相同的模型。

Git的,特別是根據各地提交(實際上,對象,其中提交的是一個類型的對象,但一個更簡單的心理模型上手,讓我們想想提交)

你存儲庫是提交樹。與svn不同,一個提交可以有多個父代。

Git也是分佈式的,與svn不同,即使以集中式存儲庫類型的方式使用它,這種區別也很重要。當你推入git時,你只是將提交的樹與一些遠程提交樹同步。

而在svn中你有一個倉庫,並且你有一個本地工作副本,在git中,你克隆倉庫。你在本地擁有的是一個擁有自己權利的存儲庫,它可以擁有自己的提交和分支,並且其他人可以克隆。

所以要(終於)找到您的問題:

  1. 有多個項目的單個存儲庫的想法來自約因爲在SVN通常存在子目錄和不同的存儲庫之間沒有任何區別。這不適用於git,你絕對應該爲每個項目都有一個單獨的存儲庫。
  2. 在git中,分支只是一個應用於項目提交樹中特定提交的標籤。提交,標籤等都在倉庫的根目錄中.git的某個地方鬆動了;直接查看這些文件通常沒有幫助,而是使用如git branch這樣的命令列出分支或git checkout來更改分支。

如果您想深入瞭解git的工作原理,我建議您閱讀一下Git from the inside out。沒有必要使用 git,但我發現有一個相當準確的心智模型,git在封面下做了什麼,這使得它的行爲不那麼令人驚訝。

+0

你的直覺已經到位,我曾經與svn一起工作過,因爲你以爲:)一定是已經獲得了svn類的邏輯,因此缺乏理解。 好的,非常感謝,這使得它更清晰。 – oneday

+0

這對svn來說不是完全獨特的,有些人偶爾會使用Mercurial這樣的DVCSes(一些Mercurial教程主動鼓勵「新分支的新克隆」;它在概念上很簡單,因爲hg通過硬鏈接共享底層文件,而不是即使佔用那麼多空間)。但是,是的,在使用大多數其他VCS之後,Git是一個令人費解的故事。 :-) – torek

相關問題