没有历史的git分支

时间:2009-08-27 20:31:09

标签: git branch

我的git repo包含敏感密码,由于我无法控制的原因,目前无法将其删除。现在一切都好,因为这个回购只是内部的,但我被要求创建一个可以安全地与合作伙伴共享的分支。

有没有办法在git中创建一个分支,然后以无法使用日志检索它们的方式从中删除文件?

似乎是一个长镜头,但我想我会问。我能想到的唯一解决方案是将文件树复制到没有敏感文件的新git仓库 - 但是我失去了将伙伴更改合并回我的仓库的能力。

4 个答案:

答案 0 :(得分:29)

您可以做的一件事是创建一个repo的分支,编辑密码,然后创建一个您将给合作伙伴的存储库的浅层克隆(深度为1)。他们可以制作补丁和针对该克隆的东西,但无法看到整个历史记录,也无法在其他任何地方推送回购。如果他们只是做出改变,那么这应该是一个可行的解决方案。您仍然可以接受来自它们的补丁并应用于主存储库。

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

答案 1 :(得分:5)

使用filter-branch

  

假设您要删除文件   (包含机密信息   或侵犯版权)   承诺:

     

git filter-branch --tree-filter'rm filename'HEAD

答案 2 :(得分:5)

git clone --depth 1 url_of_your_remote_repository

浅存储库的限制

  • 您无法从浅层存储库中克隆或获取(这意味着您无法使用此浅层副本创建新存储库)

  • 您无法使用git log命令查看整个历史记录。

  • 其可行的解决方案,您的合作伙伴可以进行一些更改并将其作为"补丁"如果您希望更改合作伙伴,请将其发送给您的合作伙伴。然后将这些修补程序应用于当前工作树/要应用的任何分支。

    More

答案 3 :(得分:0)

我会抓住几个答案。我们假设您可以创建一个不包含敏感数据的分支。你云然后做一个不包含历史的分支的浅层克隆,因此你无法从中拉出来,但它可以形成你。

另一件事是克隆新的存储库并使用git清除工具来清除敏感数据。这将创建一个不同的存储库,除了通过第一个补丁,但是具有所有历史记录时,它们无法进行交互。