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

how to version files ONLY locally with git

我有一个项目有两个分支 foobaar。在这个项目中,我有一个配置文件 database1.propertiesdatabase1.properties,其中存储了数据库属性,例如模式名称和模式密码。当我在 foo 分支上工作时,架构名称是 foo,密码是 foo,当我在 baar 分支上工作时,架构名称是 baar,密码是 baar。如何告诉 git 这些属性文件仅适用于我的本地系统,不应推送到原始存储库?我使用 egit 和 tortoiseGit.

对于单个分支,您无法阻止推送选定的文件。

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

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

方式 1 - 不断变基

假设有3个分支:

  • master 对于 public
  • boo 私人
  • baar 私人

像这样:

您在 master 分支上开发了一些东西,然后将 foo 和 baar 分支变基到 master 上。您需要 (1)Checkout foo,(2)Rebase foomaster,(3)Checkout baar,(4)Rebase baar 到 master,那么它将变成:

注意:必须一遍又一遍地重复这些步骤。

方式 2 - 合并

假设相同的3个分支。

签出 foo,并将 master 合并到 foo:

baar分支做同样的事情,最后你会得到:

在master上开发了一些,再做一遍,得到:

方式 3 - 子模块

如果将所有分支推送到远程,以上两种方式有点危险。这种方式比较复杂,你需要知道如何使用子模块,但我更喜欢它。 :)

(1) 为私有数据库准备一个data repo,可以checkout foo/baar.

之间的分支

(2) 准备另一个 normal/simple 仓库作为容器,像这样:

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

提交后你会得到这些:

(4) 再次添加名为 test 的 public 存储库作为子模块:

现在,您可以在 test 存储库中进行开发,并检查另一侧数据存储库的任何分支。

注1: 要求调整好路径

注意2:如果你不喜欢submodule,你可以用一个文件夹作为容器,然后把这两个repo放进去。

方式 4 - 不提交或压缩的合并

正如(by @Royal Pinto)所说,我在这里展示了TortoiseGit操作。

注意:私有数据已暂存到索引文件中。以便下一个提交命令将其提交到 repo。