有很多问题涉及忽略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存在差异。也许这是正确的方法吗?似乎应该有更好的解决方案。
制作子模块 - 我认为我不理解这个过程,因为我无法按照我想要的方式工作。由于文件必须以相同的名称命名,在每个文件夹中,我认为我没有正确指定我想要的存储库的位置。
如果您有任何指示,请告诉我!感谢。
答案 0 :(得分:2)
检查符号链接,指向完全忽略的机器特定目录中的文件怎么样?每个分支都有相同名称的符号链接,指向不同的目标。每台机器都负责使用必要的内容填充机器特定的目录。
branch a: temp/machine-specific-1 => ../local-files/machine-specific-1-branch-a branch b: temp/machine-specific-1 => ../local-files/machine-specific-1-branch-b
(可选)检查包含模板文件的目录,从不直接引用,并在本地文件中添加引导脚本,以便在新结帐时手动复制模板目录中的文件。
答案 1 :(得分:0)
将temp/
添加到您的.gitignore
文件中。
这将忽略此目录中的所有文件。当您克隆到另一台计算机时,此目录中不会放置任何内容(当您执行git add .
或git commit
时也不会存储)
要submodule
关注this link。执行子模块的技巧是你必须将所有“想要的”文件移动到一个单独的git存储库中。如果您已经在当前的git仓库中拥有sub-dir但这不是不可能的(将当前树克隆到临时树,执行git filter-branch --subdirectory-filter
,将其推送到公共仓库...这可能会非常棘手你永远不会失去历史!)在设置了单独的遥控器后,您将能够进行git add submodule <path to repo> <localpath>
,并且一切都将在世界上很好。