2013-10-04 31 views
0

我一直不一致地使用Git來跟蹤我的應用程序中的更改,而我已經使用了每個發行版代碼的.zip存檔。將舊版本添加到Git歷史記錄? (在另外兩個之間插入一個版本?)

現在我實際上擁抱Git,我希望將所有這些舊的歷史記錄放入一個非常簡單明瞭的Git歷史歸檔文件中,以便爲測試和歷史目的回滾到舊版本。

我該如何最輕鬆地將一系列.zip文件添加到當前項目的過去歷史中?

我已經看到了有關如何做到這一點的一些描述 - 但它需要首先查找並排序所有版本,然後逐個提交一個空白檔案。如果我這樣做並記錄版本1.0和3.0,並且稍後才能找到2.0的代碼 - 我如何在稍後將2.0插入到歷史記錄中而不影響1.0或3.0?

謝謝!

PS:Git存檔不與其他任何人共享。根本不關心與任何人的共享歷史的混亂。

+0

在技術上,你可以在1.0和3.0之間插入2.0,而不會影響1.0,所以3.0的「樹對象」。但是3.0的'commit object'一定會被改變(也就是說,必須爲3.0創建一個新的'commit object',它具有不同的sha-id)。 – SaltyEgg

回答

0

如果你已經提交了1.0和3.0的提交,你可以通過檢出1.0,提取2.0並提交它來爲2.0創建提交。但是,這將使3.0擁有1.0作爲其父項。更換承諾,改變它的母公司,是可以通過建立一個移植文件:

echo (commit id of 3.0) (commit id of 2.0) >.git/info/grafts 

在這一點上,如果你檢查出的當前版本,並運行git log,你應該清楚地看到了歷史,你希望看到的。然後,您可以使用git filter-branch爲3.0創建一個新的提交(並且對於更高版本類似),其中真的是具有2.0作爲其父項。

1

你問了兩個問題:

  1. 我怎麼能拒絕一些zip文件安裝到Git的歷史?
  2. 如何將提交插入git歷史?

回答這些問題,下面是:

  1. 我寫了一個小bash腳本,應該這樣做。它假定你有你想要的一個文件夾中提交的zip文件,你將需要修改前兩個參數對您的設置正確:

    # The path to your git project. 
    gitFolder=/myproject 
    
    #The path to your zip files. 
    ZIP_FILES=/path/to/files/*.zip 
    
    for zipFile in $ZIP_FILES 
    do 
        echo "Wiping previous files" 
        rm -rf $gitFolder 
        echo "Unziping the file into the $gitFolder folder" 
        upzip $zipFile -o -d $gitFolder 
        echo "Staging all changes" 
        git add --all 
        commitMessage="commit for: $zipFile" 
        echo "Committing the changes, with the commit message: $commitMessage" 
        git commit -m '$commitMessage' 
    done 
    
  2. 你可以做一個interactive rebase,這使得你(除其他外)重新提交提交。因此,爲了在以後添加舊版本,您應該:

    1. 將它們添加爲新提交。
    2. git rebase -i
    3. 重新排序提交以正確的順序。
+0

我不認爲git rebase是正確的方法。 git rebase重新排列補丁並重構樹。在OP的情況下,樹木已經是正確的,不需要重建。 – hvd

0

如果可以排序你的一些工作,只需提交逐一一些分支(也許你的主分支)。

如果你不能很容易排序它,你可以創建儘可能多的分支,因爲有zip文件,並將你的老樹分別提交到每個分支。你甚至不必維護許多分支(這可能很無聊) - 你可以簡單地標記它們並移除分支指針。只要提交可以通過分支或標籤到達,它就可以工作而不會丟失提交。

當然,第二種方法有點麻煩,但仍比保留zip文件好。

相關問題