2012-01-04 120 views
1

我知道克隆功能可以做到這一點的遠程倉庫,但事情會克隆什麼是回購協議,這是正在推的一切。創建本地文件已經在本地回購

我們需要的是修改我們存儲庫模板中的一些文件,並使用這些修改過的文件創建一個新的回購站,而不必將這些文件(依賴於項目)提交給我們的模板,因此它保持不變。

這可能嗎?使用「git add」,「git commit」,然後使用一個額外的參數「git push」,該參數可能是遠程存儲庫?

基本上,我想要的文件,而不是回購。

+0

你可以使用'git remote add',然後推送到那個新的遠程。 – Philippe 2012-01-04 19:46:41

+0

這並不是一個壞主意,但是如果我們從模板中修改文件,它們也會被推到所有衍生它的項目上,這可能會破壞一些東西。 – NaturalBornCamper 2012-01-04 20:02:39

+0

新存儲庫與原始存儲庫之間的關係是什麼?即是否應該將原始存儲庫(在共享文件上)的更改反映到新存儲庫中?還是僅僅是一次性複製? – Philippe 2012-01-04 20:04:09

回答

2

主要考慮庫(主)和庫繼承(child1,的child2)。我會做什麼,開始將主存儲庫中創建每個孩子一個分支:

main$ git checkout -b child1 
... edit/commit for child1 ... 
main$ git checkout master 
main$ git checkout -b child2 
... edit/commit for child2 ... 

現在,你可以這樣做:

main$ git push [email protected]:repositories/child1.git child1:master 
main$ git push [email protected]:repositories/child2.git child2:master 

這推動上庫child1的主分支child1。這樣你可以保持你的主要清潔。如果這是一次性推動,則可以在之後移除分支。你主要需要強迫孩子庫合併,如果你能不能快進(see the refspec for the push)。

+0

這可能會奏效,我會試一試 – NaturalBornCamper 2012-01-04 20:40:43

+0

非常感謝!無需強制合併! – NaturalBornCamper 2012-01-04 21:47:35

0

最簡單的就是使用你推到一個遠程,然後才能應用更改本地克隆。您可以執行以下操作:

  1. 複製模板存儲庫。

    git clone --no-hardlinks templaterepo newrepo

  2. 過濾掉你不想從舊倉庫保存文件。

    cd newrepo

    git filter-branch --tree-filter "rm -f sensitive/file1.txt file2.txt" HEAD

  3. 進行任何其他變化,你通常在Git來完成。

    git add ...

    git commit ...

  4. 添加遠程。

    git remote add origin [email protected]

  5. git push origin master

這將確保你保存歷史記錄所有你真正關心的文件,並全殲歷史記錄那些你不關心(哪些可能包含敏感數據)。

步驟1之後。newrepotemplaterepo基本上沒有任何關係,除了共享歷史記錄(--no-hardlinks假設你是從同一個文件系統克隆的,只是爲了加快速度),所以不管你在templaterepo之後做什麼,它都不會影響到內容newrepo(或其遠程)。

查看git help filter-branch瞭解更多。