我有一个包含两个分支 foo
和 baar
的项目。在这个项目中,我有两个配置文件 database1.properties
和 database1.properties
,其中存储数据库属性,例如架构名称和架构密码。当我在 foo
分支上工作时,架构名称是 foo,密码是 foo;当我在 baar
分支上工作时,架构名称是 baar,密码是 baar。如何告诉 Git 这些属性文件只针对我的本地系统,不应该推送到源代码库?我使用 Egite 和 TortoiseGit。
我有一个包含两个分支 foo
和 baar
的项目。在这个项目中,我有两个配置文件 database1.properties
和 database1.properties
,其中存储数据库属性,例如架构名称和架构密码。当我在 foo
分支上工作时,架构名称是 foo,密码是 foo;当我在 baar
分支上工作时,架构名称是 baar,密码是 baar。如何告诉 Git 这些属性文件只针对我的本地系统,不应该推送到源代码库?我使用 Egite 和 TortoiseGit。
单个分支无法防止选定的文件被推送。
当分支被推送时,所有提交都将被推送到远程仓库。
解决方法是在不同的分支(如foo-local
、bar-local
等)中保存本地更改,并在需要这些更改时使用git merge local-branch --no-commit --no-ff
或类似命令合并到实际分支中(这不会将您的本地特定更改合并到远程跟踪分支)。完成后,您可以放弃这些更改(但这些更改将始终存在于本地分支中,随时可以应用于实际分支)。
假设有三个分支:
master
用于公共代码boo
用于私有代码baar
用于私有代码类似于这样:
你在master
分支上开发了一些东西,然后将foo和baar分支rebase到master。你需要 (1)Checkout foo
, (2)将foo
rebase到master
,(3)Checkout baar
, (4)将baar
rebase到master
,然后它就会变成这样:
注意:需要重复这些步骤一遍又一遍。
假设有相同的3个分支。
切换到foo
,并将master
合并到foo
中:
在 baar
分支上执行相同的操作,最终你将得到:
在主分支上进行了一些开发后,再执行这些步骤,就会得到:
以上两种方式有一定的风险,如果将所有分支推送到远程。这种方式更为复杂,您需要知道如何使用子模块,但我更喜欢它。 :)
(1) 为私有数据库准备一个数据存储库,您可以在foo
/baar
之间检出分支。
(2) 准备另一个普通/简单的仓库作为容器,类似于这样:
(3) 然后将该数据仓库作为子模块添加到此仓库中:
提交后,您将获得以下内容:(4) 再次将名为test
的公共仓库作为子模块添加:
目前,您可以在那个test
存储库中开发,并在另一侧检出数据存储库的任何分支。
注意1:需要调整好路径。
注意2:如果您不喜欢子模块,可以只使用文件夹作为容器,然后将这两个存储库放入其中。
如此答案(由@Royal Pinto提供)所述,我在此展示TortoiseGit操作。
注意:私有数据已经被暂存到索引文件中。因此,下一个提交命令将把它提交到仓库中。
git add
命令将它们添加进去。 - Black