阻止Git推送秘密(但被跟踪)的文件

时间:2016-02-11 18:48:33

标签: git push git-submodules git-remote

使用git我跟踪名为top-secret.txt的最高机密文件。 如何在推送时确保此文件永远不会离开本地系统 到远程(但在本地版本控制下)?

示例

  • 假设我有一个提交,它会更改名为top-secret.txt 的秘密文件和另一个名为not-secret.txt的文件。
  • 当推送此提交时,对not-secret.txt所做的更改将被转移到遥控器。
  • top-secret.txt所做的更改应保留在我的本地系统上。

额外信息: 推送由持续集成系统执行,因此我有机会在推送到遥控器之前在本地执行脚本。

我是否需要为此设置一个git子模块,或者是否有更简单的解决方案?

2 个答案:

答案 0 :(得分:2)

你做不到。 Git的底层对象模型(所有东西都是四种类型之一的对象:commit,tree,annotated-tag或“blob”-ie,file)禁止区分“我能看到的文件但你不能”和“文件”每个人都可以看到“。拥有存储库副本的任何人都可以看到存储库中的每个对象。

因此,只有两种方法可以保密文件:

  • 首先不要将它包含在存储库中,或
  • 加密。

子模块方法相当于完成第一个方法,同时还提示缺少某些东西(与“那里但加密”不一样)。

答案 1 :(得分:0)

我会创建一个子文件夹来包含你的秘密文件,并在该目录中创建一个本地git repo,即git init mysecretsubdir。然后将mysecretsubdir/添加到您的.gitignore,以便它不会被提交到主存储库。这允许您将版本历史记录保存为您的秘密文件,而无需与其他人共享。

当然这种方法有点笨拙,但是git并不是真的可以用来做你想要的。您可以做的另一件事是创建一个filter,当它进入索引时会自动加密您的文件,并在文件进入您的工作目录时对其进行解密。