1

有很多问题涉及忽略 git 中的内容,但似乎没有一个适用于我的特定情况。我有一个看起来像这样的项目:

proj
|-foo/
|--project-file.txt
|-bar/
|--project-file2.txt
|-temp/
|--machine-specific-file.txt
|--machine-specific-file2.txt

(编辑:为清楚起见添加)我的 .gitignore 文件:

temp/

我的项目有几个分支,所有分支中都有不同的特定于机器的文件。我的问题是:因为我没有跟踪特定于机器的文件(没有理由签入它们,因为它们只在这里有用),每次我切换分支并尝试打开我的项目时,机器特定的文件被覆盖。这是一个问题,因为我的软件需要大约 10 分钟来生成它们——当我每天切换分支 5 或 6 次时很烦人。有没有办法以某种方式跟踪每个分支的机器特定文件,而不必将它们存储在服务器上?

我尝试过的事情:

  • 为我需要工作的每个分支创建一个新的本地分支,将特定于机器的文件保存在那里,当我需要合并我的工作时,首先将其与原始分支合并(简单,因为它是快进),并且然后去与其他一切合并。问题:它可以工作,但是很混乱,由于 .gitignore 的差异,有时需要一段时间才能进行第一次合并。也许这是正确的方法?似乎应该有更好的解决方案。

  • 制作子模块 - 我不认为我理解这个过程,因为我一直无法让它以我想要的方式工作。由于文件必须命名相同,因此在每个文件夹中,我认为我没有正确指定我想要的存储库的位置。

如果您有任何指示,请告诉我!谢谢。

4

2 回答 2

2

签入符号链接,指向完全被忽略的机器特定目录中的文件怎么样?每个分支都有同名的符号链接,指向不同的目标。每台机器将负责用必要的内容填充特定于机器的目录。

分支a:
temp/machine-specific-1 => ../local-files/machine-specific-1-branch-a

b支线:
temp/machine-specific-1 => ../local-files/machine-specific-1-branch-b

可以选择签入包含模板文件的目录,从不直接引用,并在本地文件中添加引导脚本,该脚本在新签出时手动复制模板目录中的文件。

于 2012-05-17T15:25:18.647 回答
0

添加temp/到您的.gitignore文件中。

这将忽略此目录中的所有文件。当您克隆到另一台计算机时,此目录中不会放置任何内容(执行git add .or时也不会存储git commit


做一个submodule跟随这个链接。做子模块的诀窍是你必须将所有“想要的”文件移动到一个单独的 git 存储库中。如果您在当前的 git 存储库中已经有了子目录但并非不可能,这可能会很棘手(将当前的树克隆到临时树,执行 a git filter-branch --subdirectory-filter,将其推送到公共存储库......这样你就不会失去历史!)。设置单独的遥控器后,您将能够做一个git add submodule <path to repo> <localpath>并且一切都会好起来的。

于 2012-05-17T13:51:18.537 回答