只在git存储库中包含一次文件

时间:2011-01-31 22:11:14

标签: git

我有这个文件。我们在文件夹x中为此示例说y。我想在目录中放置一个存根(P.S:我相信this github project实际上是我想要的),但只有一次。对于此示例,它看起来像这样:

module.exports.id = "";
module.exports.secret = "";
module.exports.callback = "";

不应该共享这些值,这就是为什么我只想将文件(存根/空)放在存储库中一次。

当我再次修改x时,不应将更改放在git存储库中,而只应放在目录y内。

我希望我有道理,这也不是一个重复的问题。如果是这种情况,我很想知道讨论这个的stackoverflow主题,以便我可以关闭这个主题。

2 个答案:

答案 0 :(得分:5)

我通过以下方式解决:我将文件x重命名为x-default并将git设置为忽略文件x(例如,通过目标中的.gitignore y)。签出回购的每个用户都必须将签出的文件x-default复制到x并设置其值。

这样做的好处是,文件x-default可以使用新值更新而不会出现问题(不会覆盖用户的配置),并且由于x被忽略,用户的值不会与之同步其他用户的回购(就像你想要的那样)。

您的程序应检查是否存在x,如果没有,请提示将x-default复制到x并进行配置(或自动执行此操作)。


修改

  

这有效,但我相信它可以做得更干净。

取决于你想要什么。您也可以在本地仓库中使用它:

git update-index --assume-unchanged x

因此,您提交文件一次,然后在不希望进一步更改的情况下对文件运行命令。这里的问题是,如果其他用户希望像你一样拥有它,那么其他用户将不得不做同样的事情,否则他们的更改将被提交(并且将覆盖你的更改或者它将以合并冲突结束)。

要撤消此操作,请转到

git update-index --no-assume-unchanged x

我不知道其他解决方案,但可能是其他人。


修改

  

P.S:我相信这个github项目实际上是我想要的

这更像是我的第一个答案!他们有一个文件example_keys_file.js,在文件.gitignore中他们忽略了keys_file.js

答案 1 :(得分:2)

解决此问题的标准方法是:

  1. template.ext.in放入您的存储库
  2. 让您的makefile / script /手动将template.ext.in复制到template.ext并修改值
  3. 将template.ext添加到.gitignore以确保它永远不会被提交。