2011-08-30 123 views
2

我有一個問題,我們需要向外包商提供我們的git存儲庫的過濾版本。git存儲庫的過濾版本

所以我們需要維護一個版本的git倉庫,它有一些關鍵字找到並替換爲其他東西。

這背後的推理是我們不希望外包商將代碼粘貼到論壇中,該論壇中有我們客戶的姓名,因爲它發生在過去。

如果git可以暴露類似這樣的東西,這將是很酷的,但我想這是不可能的,因爲它會改變所有的SHA ID。

我想解決方案是有2個獨立的git倉庫保持在某種程度上同步。同步將需要2路。因此,當我們對代碼庫進行更改時,這些更改會被推送到過濾代碼庫(並在過程中被過濾),如果外包商進行更改,那麼這些更改會被推送到我們的存儲庫,但是在返回時未經過濾。

我們或許可以用櫻桃採摘等方式將某些東西一起扯開。但我想可能會讓它變得可靠一些。我想在概念上它與git-svn很相似。

那裏有工具可以產生這種結果嗎?

+0

你可以看看http://stackoverflow.com/questions/2316677/can-git-automatically-switch-between-spaces-and-tabs – Owen

回答

1

由於Owen在評論中提及,並且正如我在the answer中說明的那樣,他提到了這是filter driver的工作。

filter driver

在你的情況,你會:

  • 有一個特殊分支,其中一個git屬性聲明一個outsourcerscript
  • 該分支保持能夠代替那些關鍵字outsourcerscript
  • 合併您的工作,然後簽出該分支以獲得已過濾的工作樹
  • 添加該工作的內容將樹交給您需要與外包商溝通的獨立回購協議。

對於來自外包商的更改,請將其添加到導入分支中,在提交時腳本將恢復正確的關鍵字。
然後您將該導入分支合併到通常的工作分支。

+0

看起來像這可能會工作,謝謝。我可以告訴我的老闆,這至少在理論上是可行的。有些目錄最終也會被重命名。可能也是文件名,所以我不確定這個過濾器能走多遠。 –

+0

@Joel:過濾器不關心*文件*和它們各自的路徑*或*名稱*。它只關心他們的*內容*。所以只要你的內容含有明確的過濾器替換關鍵字,你就很好。另見http://stackoverflow.com/questions/2059326/git-equivalent-of-subversions-url-keyword-expansion/2059393#2059393 – VonC