不同的分支与git中的一个唯一文件

时间:2017-12-14 09:28:35

标签: git bitbucket except

我有一个带git服务器的项目。我们是两个正在开发它的人,我们每个人都必须为某些api使用不同的令牌。我的主分支,开发分支和测试分支还有另外一个api密钥。 所有api令牌都存放在config.json文件中,这意味着5个不同的config.json。

问题是:我想在将一个分支提交推送或合并到另一个分支时保持我的config.json不变。

我已经尝试了.gitignore文件和git update-index --assume-unchanged config.json的解决方案,但它们似乎都没有适应我的情况。 我还找到了.git / info / except文件,看起来我真正需要的是什么,但无论我尝试什么,config.json都出现了"修改过的"。

因此,如果你有一个可能的解决方案,除此之外,或者我的exept无法工作的原因,那将非常有用!

此致,Eiji

"缺乏更好的"解决方案:

我使用@ gus3001的解决方案。 我已经在其中创建了一个文件夹配置所有不同的配置(dev / master / testing / etc),以及另一个在.gitignore中引用的preset.json。

因此,在每个分支交换机上,我们只需修改被忽略文件中的短字符串。 它仍然可能令人困惑和冒险,所以如果你有更好的解决方案,请分享。

2 个答案:

答案 0 :(得分:2)

我通常如何解决此问题的方法是将用户相关配置放在单独的文件中。所以在你的情况下,我会从config.json中取出api-token并将其放在一个git-ignored文件中,或许叫做user-config.json

这可能意味着您必须更改代码才能从新user-config.json获取令牌,但好处是您实际上可以在config.json中实际跟踪非用户相关配置,不用担心只有当令牌不同时才被git忽略,而不是在其他东西发生变化时忽略。

<强> TL;博士

用户相关配置应位于单独的git-ignored文件中,以避免此类问题。

答案 1 :(得分:0)

我认为您正在寻找的是skip-worktree flag

  

可以在一个(长)句子中定义skip-worktree位:当读取条目时,如果它被标记为skip-worktree,则Git假装其工作目录版本是最新的并且读取索引版本。

您可以在skip-worktree文件上设置config.json标志,说:

git update-index --skip-worktree config.json

跳过工作树与假设不变

skip-worktree标记与assume-unchanged不同,assume-unchanged表示Git 无法检查给定文件以进行工作目录中的修改因为它假定文件没有改变

  

你可以设置&#34;假设不变&#34;位到你没有改变的路径导致Git不做这个检查。请注意,在路径上设置此位并不意味着Git将检查文件的内容以查看它是否已更改 - 它使Git省略任何检查并假设它已更改。

文档进一步clarifies this point

  

当&#34;假设不变&#34;如果位为on,则用户承诺不更改文件,并允许Git假定工作树文件与索引中记录的文件匹配。

assume-unchanged标志实际上是性能优化,如果您碰巧在文件系统上比较文件 1 或者非常慢 - 更有可能 - 如果您正在处理经常不会发生变化的大型文件。

另一方面,skip-worktree标志告诉Git完全忽略工作目录中文件的副本,并且只依赖于记录的内容在索引中。因此,skip-worktree如果在给定文件上设置了两个,则assume-unchanged具有更高的优先级而不是assume-unchanged。此外,值得注意的是,只要在上游修改文件时skip-worktree未设置,而$('.left').hide(); $('#carousel-example-generic').on('slid.bs.carousel', function (ev) { var carouselData = $(this).data('bs.carousel'); var currentIndex = carouselData.getActiveIndex(); if (currentIndex >= 1) { $('.left').show(); } else { $('.left').hide(); } if (currentIndex === (carouselData.$items.length-1)) { $('.right').hide(); $('.left').show(); } else { $('.right').show(); } }) 保持不变,直到您手动取消设置它为止。

  1. 老实说,我无法想到任何适合该描述的现代文件系统。