2014-01-09 28 views
0

我有一個本地git項目,我想通過推送到公共Github回購來開源。我們說,這是當地的項目歷史:Git push master只有在提交後才提交

  F-G [feature-1] 
     / \ 
A-B-C-D-E  H-I-J [master] 
     ^
     \(first public ready commit) 

不過,我有一個問題:原型開發過程中我已經硬編碼在一些敏感數據假設了犯d有代碼數據我不想讓任何人看到。

我該如何保留本地回購庫中的更改歷史記錄,但僅從E開始發佈?

我正在考慮兩種方法:

  1. 壁球在提交E之前,這將使E初始版本。
  2. 製作某種形式的發佈分支,稍後將開始master

歡迎使用命令行代碼段!

回答

2

在這種情況下,我會用移植文件,並改寫做到這一點:

首先,標籤d和E我會認爲他們可以從這裏被稱爲d和E。

現在,假E公司的歷史記錄,因此它不具有父:

git rev-parse E >.git/info/grafts 

然後,修改的提交,以反映這段歷史:

git filter-branch -- --all 

現在,你有一個局部變量D指向敏感數據,而本地標記E指向乾淨的數據作爲初始提交:

 
    F'-G' [feature-1] 
/ \ 
E'  H'-I'-J' [master] 

A-B-C-D 

現在,當地的需求,這可能有助於再有E」秀d作爲母公司,這樣就可以再次與移植文件來完成:

echo `git rev-parse E` `git rev-parse D` >.git/info/grafts 

請注意,您希望現在運行git filter-branch

本地,你的歷史看起來就像這樣:

 
      F'-G' [feature-1] 
     / \ 
A-B-C-D-E'  H'-I'-J' [master] 

,但如果你推,你推真正 E」,沒有父,所以遠程,你只得到

 
    F'-G' [feature-1] 
/ \ 
E'  H'-I'-J' [master] 
1

我離開@ hvd的答案是接受的答案,因爲真棒。

但是,由於我的具體用例是用於刪除敏感數據,因此我已使用Githubs guide for just this case中列出的路線。具體使用BFG

cd repo_dir 
wget http://repo1.maven.org/maven2/com/madgag/bfg/1.11.0/bfg-1.11.0.jar 
echo "PASSWORD1" >> passwords.txt 
echo "KEY_1==>KEY_FOR_SERVICE_1" >> passwords.txt 
java -jar bfg-1.11.0.jar --replace-text passwords.txt . 
rm passwords.txt 
rm bfg-1.11.0.jar 

這只是一個對任何人試圖做類似的東西一關,但我一定會堅持到BFG的未來。