我的git仓库包含敏感密码,由于某些无法控制的原因,现在无法将其删除。目前这个仓库只对内部可见,但我被要求创建一个与合作伙伴共享安全的分支。
有没有办法在git中创建一个分支,并以一种方式从其中删除文件,使得这些文件在日志中无法被检索到?
虽然看起来比较困难,但我想问一下。我唯一能想到的解决方案是将文件树复制到一个新的git仓库中,而不包括敏感文件-但这样我就失去了将伙伴的更改合并回我的仓库的能力。
您可以做的一件事是创建一个存储库的分支,将密码编辑掉,然后创建该存储库的浅克隆(深度为1),并将其提供给合作伙伴。他们可以对该克隆版本进行补丁等操作,但无法查看整个历史记录,也无法将存储库推送到其他地方。如果他们只是进行更改,则这应该是可行的解决方案。您仍然可以接受来自他们的补丁,并应用于您的主存储库。
有关详细信息,请参见git clone
的--depth
选项。
使用 filter-branch 命令:
假设您想要从所有提交中删除一个文件(包含机密信息或侵犯版权):
git filter-branch --tree-filter 'rm 文件名' HEAD
--index-filter
比使用 --tree-filter
更快地删除文件。
2.) 如果您不想更改存储库,请先创建新分支,然后重写它。 - Jakub Narębski使用命令 git clone --depth 1 url_of_your_remote_repository 可以克隆出一个浅拷贝版本的代码库。
浅拷贝版本的限制:
无法从浅拷贝版本的代码库中克隆或者拉取(也就是说,你不能使用这个浅拷贝版本创建新的代码库)。
无法通过 git log 命令查看全部历史记录。
如果你想要你的合作伙伴的变更,可以让你的合作伙伴将其变更打成“补丁”并发送给你,然后在你当前的工作树/任何想要应用该补丁的分支上应用它。
了解更多
我来试着回答一下。假设你可以创建一个不包含敏感数据的分支,那么你可以创建一个浅克隆的分支,它不包含历史记录,因此你无法从中拉取,但是它可以从你这里拉取。
另一种方法是克隆一个新的存储库,并使用git删除工具清除敏感数据。这将创建一个独立的存储库,除了通过补丁与第一个存储库交互外,不能进行任何交互,但它将拥有所有的历史记录。