如何在git repo中放置伪文件



我是git的新手,所以请耐心等待。

假设我有一个受版本控制的文件,其中包含敏感数据。果不其然,我把那个文件放在了我的.gitignore文件中,这样它就不会被推送到repo。现在的问题是在我的项目中,我有一条类似的线路

#include <sensitivedata>

或者你选择的任何语言。问题是,每当有人从该repo中克隆时,该文件就会丢失,并且在尝试构建/编译解决方案时会出现致命错误。

因此,我不想推送我实际正在处理的文件,而是想推送一些同名的伪文件,在那里我放置一个类似的注释

// replace the next line with the sensitive data!!!

我该怎么做?

您可以使用.gittributes来过滤内容:

  • .gitattributes

    secrets.h filter=secret merge=keepMine
    
  • .git/config

    [filter "secret"]
    clean  = echo "// replace the next line with the sensitive data"
    smudge = cat
    [merge "keepMine"]
        name = always keep mine during merge
        driver = /bin/true %O %A %B
    

我抛出了一个"keepMine"合并,以防止意外合并。然而,AFAIK合并甚至不应该启动,因为由于clean过滤步骤,本地更改实际上是"不可见的"。无论secrets.h中实际包含什么,repo文件都将始终包含:

// replace the next line with the sensitive data

例如:

/tmp/work$echo '// agent 007 reporting for duty' > secrets.h
/tmp/work$git status -s
M secrets.h
/tmp/work$git diff
/tmp/work$git cat-file -p HEAD:secrets.h
// secret contents not in repo

我不知道c++预处理器是否能够做到这一点(我假设上面显示的代码是针对某些c风格的预处理器的),但在类似的情况下我会这样做:

以git:提交

  • default.config
  • user.config.template

放入gitignore:

  • user.config

然后我有了基本上可以做到的代码:

if (file_exists(user.config)):
    use user.config
else:
    use default.config

这样我就可以提供一些合理的默认值,并有一个简单干净的方法来覆盖它

相关内容

  • 没有找到相关文章

最新更新