2013-05-13 62 views
0

我有一个棘手的Git情况。我有一个Git仓库,现在我需要 与另一个组织共享,并允许他们修改并将更改 还给我(并随着我所做的未来更改保持更新)。但是,存储库中的文件数量包含专有信息,我无法在法律上披露这些信息。我无法完全从版本库 中删除这些文件,因为它们对于我目前正在处理的内容至关重要。创建不包括历史记录但允许合并的新git存储库

理想情况下,我会专有的文件移动到一个单独的存储库/库, 但是这将是一个小重构项目,我想如果我能避免它。 目前,专有文件和非专有文件都在相同的目录结构中混合贯穿 。

我的目标如下

  1. 为他们提供仓库没有任何专有的文件。我不在乎他们 是否无权访问修订历史记录,它可以是只有 一次提交的“新鲜”副本。

  2. 允许他们提交的新承诺还给我来更新我的仓库。

  3. (理想情况下)允许他们接受来自我的新提交,其中仅包含对非专有文件所做的更改 。

有没有办法在Git中做到这一点,同时还让我有一个单一的 库专有和非专有的成分?

回答

0

这听起来像是一个工作 a Git submodule。 一种方式去了解这将是

  • clone本身
  • cd于母公司回购里面存放区,git submodule add <child repo>
  • 孩子回购将是私人文件,git rm其他文件,以避免 重复与父母回购

现在在父回购,你将需要git filter-branch出所有的私人文件。这是有争议的一步,因为它会一直重写历史到第一次提交私有文件。

最后,您可以维护这两个回购协议,并无需担心共享父回购。

0

(这是一个较早的答案完全重写)

git checkout -b sanitized master 
# do your sanitization work 
git commit 
git tag sanitization-prep 
git checkout --orphan distributable 
git commit 
git checkout sanitized 
git merge -s ours distributable 
git tag distributable-base 
git checkout master 
git merge -s ours sanitized 

-s ours合并标记你做的已经合并到主的所有更改,而无需实际应用它们。由于可分发提交没有父母,因此当您将该分支推送到他们将要工作的DMZ'd回购时,将发送所有内容。

当它的时间拉从分配分支

git checkout sanitized 
git merge distributable 
git checkout master 
git merge sanitized 

有一点需要注意的变化:你必须这样做,是merge -s ours distributable-base到每一个分支,你会被合并到分配。除此之外,你的工作非常平凡。

我有一个公平的方法进入出站合并过程。我迄今为止的那个人很可怕。

相关问题