如何在本地使用Git仅对文件进行版本控制

5

我有一个包含两个分支 foobaar 的项目。在这个项目中,我有两个配置文件 database1.propertiesdatabase1.properties,其中存储数据库属性,例如架构名称和架构密码。当我在 foo 分支上工作时,架构名称是 foo,密码是 foo;当我在 baar 分支上工作时,架构名称是 baar,密码是 baar。如何告诉 Git 这些属性文件只针对我的本地系统,不应该推送到源代码库?我使用 Egite 和 TortoiseGit。


也许你应该在本地克隆项目... - Basile Starynkevitch
也许最好不要使用 git add 命令将它们添加进去。 - Black
1
将其添加到 .gitignore 文件中。 - Sergey Eremin
@EdwardBlack 但是这两个分支的属性文件是不同的。当我切换到另一个分支时,我希望正确的属性文件被检出,以便我可以提交它们。 - user1167753
@SergeyEremin 如果我将它们添加到.gitignore中,我就无法对它们进行版本控制。database.properties包含foo分支的登录数据,这些数据与baar分支的登录数据不同。这就是为什么我不能将它们添加到.ignore文件中的原因。 - user1167753
2个回答

3

单个分支无法防止选定的文件被推送。

当分支被推送时,所有提交都将被推送到远程仓库。

解决方法是在不同的分支(如foo-localbar-local等)中保存本地更改,并在需要这些更改时使用git merge local-branch --no-commit --no-ff或类似命令合并到实际分支中(这不会将您的本地特定更改合并到远程跟踪分支)。完成后,您可以放弃这些更改(但这些更改将始终存在于本地分支中,随时可以应用于实际分支)。


1

方法一 - 持续变基

假设有三个分支:

  • master 用于公共代码
  • boo 用于私有代码
  • baar 用于私有代码

类似于这样:

The 2 branches

你在master分支上开发了一些东西,然后将foo和baar分支rebase到master。你需要 (1)Checkout foo, (2)将foo rebase到master,(3)Checkout baar, (4)将baar rebase到master,然后它就会变成这样:

enter image description here

注意:需要重复这些步骤一遍又一遍。

方法2 - 合并

假设有相同的3个分支。

切换到foo,并将master合并到foo中:

enter image description here

baar 分支上执行相同的操作,最终你将得到:

enter image description here

在主分支上进行了一些开发后,再执行这些步骤,就会得到:

enter image description here

第三种方式 - 子模块

以上两种方式有一定的风险,如果将所有分支推送到远程。这种方式更为复杂,您需要知道如何使用子模块,但我更喜欢它。 :)

(1) 为私有数据库准备一个数据存储库,您可以在foo/baar之间检出分支。

enter image description here

enter image description here

(2) 准备另一个普通/简单的仓库作为容器,类似于这样:

enter image description here

enter image description here

(3) 然后将该数据仓库作为子模块添加到此仓库中:

enter image description here

提交后,您将获得以下内容:

enter image description here

enter image description here

(4) 再次将名为test的公共仓库作为子模块添加:

enter image description here

enter image description here

目前,您可以在那个test存储库中开发,并在另一侧检出数据存储库的任何分支。

注意1:需要调整好路径。

注意2:如果您不喜欢子模块,可以只使用文件夹作为容器,然后将这两个存储库放入其中。

第四种方法-合并而不提交或压缩

此答案(由@Royal Pinto提供)所述,我在此展示TortoiseGit操作。

enter image description here

enter image description here

注意:私有数据已经被暂存到索引文件中。因此,下一个提交命令将把它提交到仓库中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接