Git Config 仅针对一个分支排除文件

Posted

技术标签:

【中文标题】Git Config 仅针对一个分支排除文件【英文标题】:Git Config excludesfile for just a branch 【发布时间】:2011-10-03 02:43:38 【问题描述】:

我想在我的公共分支中排除一个名为 config/dbconfig.js 的文件,我用它来推送到 github,但仍然能够从 master 推送到我的 noester.com git repo 以推送到生产环境。我将配置文件更改为:

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  excludesfile = +info/exclude
[remote "nodester"]
    url = *** My Git Repo ***
    fetch = +refs/heads/*:refs/remotes/nodester/*
[branch "public"]
  excludesfile = +info/exclude_public

我确保删除 .gitignore 文件,我使用 .git/info/exclude 文件进行一般排除,并希望使用 .git/info/exclude_public 排除该文件,所以当我合并时公开该文件不会合并也不会推送到 github。

如果我执行以下操作,即使在公共分支中,它仍会将文件添加到 git。所以我在想我的语法错误或者不可能。

$ git checkout public
$ git add .
$ git status
# On branch public
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   config/dbconfig.json
#

如果这不可能,是否有更好的方法来处理您不想在开放的 Github 项目中退出而不运行两个 git 存储库并在它们之间手动合并的数据库配置?

【问题讨论】:

【参考方案1】:

对于配置文件,最好处理内容过滤驱动程序,而不是尝试忽略某些分支的文件。

你会:

存储配置文件模板 存储公共值 让内容过滤器“smudge”脚本根据模板和公共值构建目标配置文件, ...除非该脚本检测到它位于部署环境中,在这种情况下,它将使用该服务器上其他来源的值(而不是存储在存储库中的公共值)

请参阅插图:

“Different databases for specific branches of git project”或 “When a commit to revision control requires a developer to change their own config”

【讨论】:

好的,我想我在 .gitattributes 中得到了这样的东西? config/dbconfig.json 合并=我们的 @JTWebMan:合并驱动程序也可以工作,但我对过滤器驱动程序的观点是使用来自存储库外部的值。 在我的机器上这样吗?我想我明白你在说什么,所以当我提交更改时,它会查看哪个分支并替换我在本地拥有的文件中的值,该文件不在仓库中。它也适用于合并吗? @JTWebMan:它将在结帐时替换(涂抹脚本),而不是提交。并创建一个私有文件(即不存储在 repo 中),所以不关心合并。这个想法是将敏感数据保留在回购(及其历史)之外

以上是关于Git Config 仅针对一个分支排除文件的主要内容,如果未能解决你的问题,请参考以下文章

Git / 完成发布 / 排除文件

Git:仅取消跟踪文件夹的特定分支

Windows上的Git:重命名文件后无法切换分支(仅更改大小写)

idea针对git相关的操作

git学习笔记

仅当特定文件集发生更改时如何触发构建