我想知道是否有可能提交一些更改,如果我推送,这些提交不会被其他提交推送到远程分支。
例如:我有一些我需要进行测试的本地更改。像配置文件和一些json文件的一些更改。这些更改仅在此本地分支上需要,并且永远不应该在远程分支上。因此,当我创建一个提交时,我总是试图小心不要播放那些确切的文件,每次切换分支时我都需要隐藏并弹出这些更改。
所以我想知道的是,如果Git中有一种方法可以将这些更改保留在本地分支上而无需隐藏/弹出或取消它们。
有多种方法可以解决这个问题,但这取决于您本地修改的程度。
我们首先假设您的存储库中有一些配置文件。这些配置文件可能包含诸如本地主机名,连接字符串或类似数据库等内容。
在这种情况下,最好的方法是只提交模板配置文件。
例如,如果应用程序需要存在名为app.config
的文件,但此文件包含此类文件,则您将提交名为app.config.template
的模板文件。此文件不包含实际的主机名,用户名等,但最多包含您希望添加此信息的占位符。
然后,在您的构建脚本(或类似)中,您将看到如下所示的内容:
IF NOT EXIST app.config COPY app.config.template app.config
如果需要,这将在构建时从模板到真实文件创建一个新副本。
另外,你会指示git忽略真实文件:
# in .gitignore
app.config
现在,有时这还不够。它应该是,但有时它不是。
在这种情况下,不同的方法将使用额外的分支。让我们假设您正在开发一个名为develop
的分支。
然后,您将首先为本地修改创建一个新分支:
git branch develop-local develop
然后你会检查这个分支,进行所有必要的本地修改,并提交以下内容:
git checkout develop-local
# hack hack hack
git add .
git commit -m "LOCAL modifications for test environment"
然后你会切换回真正的分支并处理一个案例:
git checkout develop
# work work work
git add .
git commit -m "Case #123, fixed bug in SQL parsing"
要测试这一点,请返回本地分支,合并真实分支并测试:
git checkout develop-local
git merge develop
# test test test
最后:
develop-local
,只有develop
develop-local
合并回develop
是的,但这有点麻烦。
我通常将我的项目配置为包括main.config和local.config等文件,只要它存在,然后以propper方式合并它们。那些本地文件当然是.gitignore。
取决于您的架构,关于.git/info/exclude的文章可以很方便
考虑使用假设不变:
指定此标志时,不会更新为路径记录的对象名称。
来自文档的git-update-index。
git update-index --assume-unchanged app.config
这将阻止app.config
被标记为已更改。
'temporarily ignoring files'可能也值得一读。