不带历史记录的git分支

27

我的git仓库包含敏感密码,由于某些无法控制的原因,现在无法将其删除。目前这个仓库只对内部可见,但我被要求创建一个与合作伙伴共享安全的分支。

有没有办法在git中创建一个分支,并以一种方式从其中删除文件,使得这些文件在日志中无法被检索到?

虽然看起来比较困难,但我想问一下。我唯一能想到的解决方案是将文件树复制到一个新的git仓库中,而不包括敏感文件-但这样我就失去了将伙伴的更改合并回我的仓库的能力。

4个回答

28

您可以做的一件事是创建一个存储库的分支,将密码编辑掉,然后创建该存储库的浅克隆(深度为1),并将其提供给合作伙伴。他们可以对该克隆版本进行补丁等操作,但无法查看整个历史记录,也无法将存储库推送到其他地方。如果他们只是进行更改,则这应该是可行的解决方案。您仍然可以接受来自他们的补丁,并应用于您的主存储库。

有关详细信息,请参见git clone--depth选项。


我认为这个解决方案对Ben的情况会更好。按存储库进行访问控制比按分支进行访问控制更容易管理。 - Apreche
4
git clone --depth 1 git@github.com:project/projectname.git - user285594

5

使用 filter-branch 命令:

假设您想要从所有提交中删除一个文件(包含机密信息或侵犯版权):

git filter-branch --tree-filter 'rm 文件名' HEAD


1.) 使用 --index-filter 比使用 --tree-filter 更快地删除文件。 2.) 如果您不想更改存储库,请先创建新分支,然后重写它。 - Jakub Narębski
是的,在我提供的文档中有关于各种技术的非常好的讨论。 - 1800 INFORMATION

5

使用命令 git clone --depth 1 url_of_your_remote_repository 可以克隆出一个浅拷贝版本的代码库。

浅拷贝版本的限制:

  • 无法从浅拷贝版本的代码库中克隆或者拉取(也就是说,你不能使用这个浅拷贝版本创建新的代码库)。

  • 无法通过 git log 命令查看全部历史记录。

  • 如果你想要你的合作伙伴的变更,可以让你的合作伙伴将其变更打成“补丁”并发送给你,然后在你当前的工作树/任何想要应用该补丁的分支上应用它。

    了解更多


0

我来试着回答一下。假设你可以创建一个不包含敏感数据的分支,那么你可以创建一个浅克隆的分支,它不包含历史记录,因此你无法从中拉取,但是它可以从你这里拉取。

另一种方法是克隆一个新的存储库,并使用git删除工具清除敏感数据。这将创建一个独立的存储库,除了通过补丁与第一个存储库交互外,不能进行任何交互,但它将拥有所有的历史记录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接