创建新的git存储库,不包括历史记录,但允许合并

时间:2013-05-13 22:52:50

标签: git version-control

我有一个棘手的Git情况。我有一个Git存储库,我现在需要它 与其他组织共享,并允许他们修改和提交更改 回到我身边(并随时更新我所做的更改)。但是,有一个 存储库中包含专有信息的文件数量 法律上不能透露。我无法从存储库中删除这些文件 完全,因为它们对我目前正在研究的事情至关重要。

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

我的目标如下

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

  2. 允许他们向我提交新的提交以更新我的存储库。

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

  4. 有没有办法在Git中做到这一点,同时仍允许我有一个 具有专有和非专有组件的存储库?

2 个答案:

答案 0 :(得分:0)

这听起来像是一份工作 a Git submodule。 一种方法是

  • clone你自己的回购
  • cd到父代仓库,git submodule add <child repo>
  • 子repo将用于私有文件,git rm要避免的其他文件 与父回购重复

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

最后,您可以维护这两个仓库,并毫无顾虑地共享父仓库。

答案 1 :(得分: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合并标记您已经合并到master中的所有更改,而不实际应用任何更改。由于可分发提交没有父母,因此当您将该分支推送到他们将要工作的DMZ的仓库时,将发送任何内容。

什么时候从可分发分支中提取更改

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

有一点需要注意:您必须将merge -s ours distributable-base放入您将要合并到的每个分支中。除此之外,你的工作非常普通。

我有一个公平的方法进入出境合并的程序。到目前为止,我的目标令人恐惧。