2012-05-17 82 views
1

在那里有很多问题涉及忽略git中的东西,但没有一个似乎适用于我的特定情况。我有一个项目,看起来像这样: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的差异,有时需要一段时间才能完成第一次合并。也许这是正确的方法呢?似乎应该有更好的解决方案。

  • 制作子模块 - 我不认为我理解这个过程,因为我一直无法按照自己想要的方式工作。由于该文件必须命名为相同的东西,在每个文件夹中,我不认为我正确指定了我想要的存储库的位置。

让我知道你是否有任何指针!谢谢。

回答

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 

可选检查模板文件,从不直接引用的目录中,并在加入启动脚本的本地文件复制手动在从模板目录中的文件上重新检出。

+0

oooh。我喜欢这些建议。让我试试它们,然后我会报告它们是如何工作的。谢谢! – gailbear

+0

经过进一步的思考:如果我的项目上的每个人都理解计算机足以使其工作,或者如果我有权为他们设置他们的机器,那么simlink解决方案将完美工作。事实上,安装git需要一个2页,非常具体的文档,我手写的,因为人们“不明白主要git站点上的说明”。 *叹*因为他们大多数都不会改变分支,所以我的问题对我来说是独一无二的。我会尝试编写一个引导脚本,在结帐时,从另一个本地git仓库中抽取相应的结帐。 – gailbear

+0

我结束了在本地使用引导脚本的符号链接的东西。合理优雅,而且工作量最少! – gailbear

0

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

这将忽略此目录中的所有文件。当克隆到另一台电脑,什么都不会放在这个目录中(也存储当你做一个git add .git commit


做一个submodule遵循this link。做子模块的诀窍是你必须将所有'想要'的文件移动到一个单独的git存储库中。如果你已经在当前的git仓库中拥有子目录,但这并不是不可能的,那么这可能会非常棘手(将当前的目录树克隆为临时目录树,执行git filter-branch --subdirectory-filter,将其推向公共回购站...这样,不会失去历史!)。在设置单独的遥控器之后,您将能够执行git add submodule <path to repo> <localpath>,并且所有这些都将在全世界都很好。

+0

假设你提到'我没有跟踪机器特定的文件(没有理由检查它们,因为它们只在这里有用)''意味着你不关心跟踪它们... – g19fanatic

+0

是的,这是真的,我已经这样做了。然而,由于这些文件在我更改分支时被覆盖,我试图找出一种方式来以某种方式在本地跟踪而不是全局跟踪,这并不需要我每次切换分支时都会跳过这些环节。 – gailbear

+0

如果您在更改分支时被覆盖,这告诉我他们实际上在您的存储库中。我首先将它们从repo'git rm temp/*'中删除,然后确保适当的过滤器位于'.gitignore'中。在不同的分支上执行此操作,您不必担心任何被覆盖的内容......它会忽略此目录...要在本地但不是全局跟踪它们,则需要执行子模块。 – g19fanatic