我经常发现自己在Git中改变了我的项目中的单个变量,以便在开发分支上连接到不同的服务器(在JavaScript中,所以我不能使用预处理器定义).
在Git中是否有某种方法我可以有条件地使用一个或另一个文件,具体取决于我所在的分支?
我不能只使用指定的不同URL提交更改,因为这样做会将其保留在我的提交历史记录中,如果我稍后在Master上合并后再返回该版本,它将具有开发服务器URL.
mea*_*gar 10
不,没有,但这是一个解决得很好的问题.
你有几个选择:
config.example
文件,列出需要指定的所有配置选项,并为开发提供合理的默认值.config.example
到真实的配置文件名,并添加实际值.gitignore
.setup.sh
脚本,该脚本复制config.example
到真实配置的位置,并使用本地环境的变量填充它例如,您可能有一个JavaScript应用程序需要知道其数据库的位置,并从中读取此信息config/database.json
.你可以使用这样的东西:
// config/database.example.json
DATABASE = {
"host": "localhost",
"user": "#TODO",
"pass": "#TODO",
}
Run Code Online (Sandbox Code Playgroud)
要在开发中运行,您可以将此文件复制到config/database.json
,并填写适合您的开发环境的值.
在生产中,您将拥有config/database.json
包含生产值的产品,但不受版本控制.
回购将config/database.json
在其中.gitignore
.
config.development
和config.production
等如果您的配置文件中有任何远程敏感信息,例如AWS密钥或任何形式的密码,您应该使用第一个选项 - 存储配置选项的名称,但不存储其值,并要求用户提供自己的凭据,通过版本控制之外的安全通道.
请注意,条件包含配置即将推出,从 Git 2.13(2017 年第二季度)开始。
目前支持的唯一条件是项目名称,而不是主机名。
在您的情况下,如果每个分支都在其自己的文件夹中检出(使用git worktree
:请参阅“使用 Git 的多个工作目录”),这将起作用。
请参阅Nguy?n Thái Ng?c Duy ( ) 的commit 86f9515和commit 4aad2f1(2017 年 4 月 5 日)。(由Junio C Hamano合并-- --在提交 a2e2c04 中,2017 年 4 月 24 日)pclouds
gitster
config
: 添加条件包含有时,一组存储库希望在它们之间共享与其他此类存储库不同的配置设置。
一个用户可能在两个项目上工作,每个项目都有多个存储库,user.email
一个项目使用一个,另一个项目使用另一个。设置
$GIT_DIR/.config
有效,但如果忘记更新的代价$GIT_DIR/.config
很高(特别是当你经常克隆时),这可能不是最好的方法。
在 中设置~/.gitconfig
仅适用于一组存储库的设置,在这种情况下效果不佳。
分开${HOME}s
可能会增加更多的问题而不是它解决的问题。扩展
include.path
允许一个配置文件包含另一个配置文件的机制,以便只有在某些条件成立时才能包含。
然后~/.gitconfig
可以对每个用户工作说“config-project-A
仅在工作时包括project-A
”project A
。在此补丁中,唯一支持的分组基于
$GIT_DIR
(在绝对路径中),因此您需要按目录或类似方式对存储库进行分组以利用它。我们已经有了
include.path
无条件包含。
这个补丁includeIf.<condition>.path
用来更清楚地说明需要一个条件。
新配置具有与以下相同的向后兼容性方法include.path
:不理解的旧 git 版本includeIf
将简单地忽略它们。
Git 2.14(2017 年第三季度)澄清了文档。
请参阅Jeff King ( ) 的commit ce933eb、commit a076df2、commit 994cd6c、commit 9d71d94 (11 May 2017 )。(由Junio C Hamano合并-- --在ed98060 中,2017 年 5 月 29 日)peff
gitster
该文档现在阅读并包括:
包括
在
include
与includeIf
部分允许您包括来自其他来源的配置指令。这些部分的行为彼此相同,但includeIf
如果它们的条件不为真,则部分可能会被忽略;请参阅下面的“有条件的包含”。
相同的 Git 2.14 加强了该功能。
请参阅Ævar Arnfjörð Bjarmason ( ) 的提交 0624c63(2017 年 5 月 16 日)。(由Junio C Hamano合并-- --在提交 b784d0b 中,2017 年 5 月 30 日)avar
gitster
最近引入的“
[includeIf "gitdir:$dir"] path=...
”机制进一步被教导要考虑符号链接。"
$dir
" 中指定的目录 " "gitdir:$dir
可能是指向实际位置的符号链接,而不是$(getcwd)
可能返回的内容。
在这种情况下,将“$dir
”的真实路径与当前存储库的真实路径进行比较,以确定是否应包括来自命名路径的内容。
归档时间: |
|
查看次数: |
2425 次 |
最近记录: |