2009-09-14 55 views
1

我有一個大型項目,我正在升級到邊緣Rails。我做了整個項目目錄的一個副本,並在那裏重構,以作爲相信git的一項預防措施(或者至少我可能會使用/誤用它)。在完成最讓我回到原來的項目目錄,並在控制檯上工作後(這是從內存,所以是鬆散的基礎上究竟發生了什麼):git錯誤或濫用分支?

git branch edge 
git checkout edge 
git rm vendor/plugins 
git commit -m "wiped out old plugins" 

然後我手動的最新版本複製我在複製的項目中更新過的插件。

git add vendor/plugins 
git commit -m "re-added in plugins, some unchanged, some later versions" 

我的理解是,上面的添加是遞歸的。爲了獲得對git的一些信任,我在工作期間的不同時間在主分支和邊緣分支之間來回交換,以確保它處理交換沒問題。

git checkout master 
git checkout edge 

我注意到的是(在一些交換後)在邊緣分支中的一些插件恢復到主版本。無數次我試圖提交有問題的插件的最新版本,但最終在交換後恢復。

我懷疑手動移動文件後添加文件的方式可能存在問題。 (是git添加供應商/插件/ *必要的?)當兩個分支包含一些相同的子目錄時,任何人有任何問題與分支之間交換?你如何處理在一個目錄中找到的應用程序副本中找到的更改合併回原始?原始的版本庫是乾淨的,而複製是從試圖獲得某些插件在邊緣分支中保持更改相當混亂。

回答

5

這似乎是一個非常奇怪的方式來做你想要的。

做你什麼建議的更「混帳」的方式會一直到:

$ git checkout -b edge 
... #make your modifications for the port. 
$ git commit -m'ported plugins to rails edge' -a 
$ git checkout master # original code is there untouched 
$ git checkout edge # ported code is there just as you commited it. 

從那裏,這取決於你是什麼樣的目標是,你可以:

$ git checkout master # make sure you are on the master branch 
$ git merge edge # merge the edge branch into master 
... # fix any errors 
$ git branch -d edge # remove the edge branch since you don't need it anymore. 

或者維持兩個分支機構。一個移植到邊緣,另一個移植。這可能不是你想要的。 Git中的分支既便宜又容易,完成後可以將它們丟棄。

+0

提到我很欣賞的反饋。我知道我沒有采用git標準的方法,但我仍然是一個git新手,所以想要小心以防我可能執行一個git命令,我並不完全理解並丟失了一堆工作。 – Mario 2009-09-14 13:56:06

+0

既然分支機構很便宜,而且安全,只要你先分支,那麼你可以扔掉你在新分支上做的任何事情,而不用擔心把主分支搞亂了。 – 2009-09-14 18:24:17

+0

不幸的是,即使按照你的步驟,當我嘗試切換回主分支時,也會遇到這種問題: 錯誤:未合併的工作樹文件'vendor/extensions/blog_tags/LICENSE'將被合併覆蓋。 我曾經遇到過這種情況,似乎會造成麻煩。 – Mario 2009-09-15 11:12:19

2

git checkout不會刪除不在提交中的文件。您必須使用git clean -f刪除當前工作目錄中的所有不需要的文件。您也可以再次刪除文件夾並git checkout -f

比其他

這真是最好創建一個分支爲您邊工作功能,然後合併分支回,就像傑里米牆