2011-08-30 115 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

相关问题