我在存储库中有一些跟踪文件,这些文件在构建代码时会自动修改.我不想解开它们,我只是不希望它们显示为已修改,我不希望它们在我git add时上演.
这可能吗?
由于外部奇怪的约束,我无法修改.gitignore我的存储库.有没有办法忽略文件和目录,而不是修改.gitignore?即使它是全局配置的全局解决方案,也将应用于我的所有存储库.
我创建了一个包含在git存储库中的文件的默认版本.重要的是,当某人克隆存储库时,他们会获得此文件的副本.但是,我想设置git,以便稍后忽略对此文件的更改. .gitignore仅适用于未跟踪的文件.
我的动机是这个文件包含机器特定的信息.我想提供默认值,同时允许人们进行不会被推回原始存储库的本地更改,从而在我们提取新更改时创建合并冲突.
我们通常非常懒惰并且使用git add .很多,所以我很确定如果我不能告诉git忽略这个文件,对它的更改将最终得到提交和推送.
总结一下,
default_values.txt添加到我的git存储库,并在有人克隆该存储库时包含该文件.git add .不应该添加default_values.txt到提交.我在我的git repo中有一个tmp目录我想仍然存在,但是被忽略了.我添加了它.gitignore,但git status仍然告诉我有关该目录中文件的更改.我试过了git rm -r --cached,但是它将它从远程仓库中删除了.如何停止跟踪对此目录的更改,但仍然允许它存在?我还需要1个文件做到这一点,但变化是,在也出现git status之后.gitignore荷兰国际集团他们.我该怎么办?
我开发的一个常见场景是代码库将有几个配置文件需要特定于机器的设置.这些文件将被检入Git,其他开发人员将不小心将它们重新检入并打破其他人的配置.
一个简单的解决方案就是不将它们检入Git,甚至为它们另外添加.gitignore条目.但是,我发现在文件中有一些合理的默认值更加优雅,开发人员可以根据自己的需要进行修改.
有没有一种优雅的方式让Git很好地使用这些文件?我希望能够修改特定于机器的配置文件,然后能够在不检查该文件的情况下运行"git commit -a".
我一直告诉我和其他人不要提交.classpath和.project文件并使用Maven.
不知何故,初级开发人员总是忽略某些规则并提交这些文件,并且为可以跳转并开始使用代码的新手提供这样的文件要好得多.
现在从myside,我想尝试/做一些事情.当我克隆repo时,我将获得.classpath和.project文件,当然它们会在我的系统中被修改.
但我希望它们不会被提交,并且在与Git同步时应该始终被忽略.因此,我在本地系统中的更改不会搞砸Git和Git这些文件的更改不会弄乱我的本地文件.
我该如何实现这一目标?无论如何要以这种方式标记要忽略的文件?
具体来说,我维护了我的dotfiles的git存储库.我最近开始研究一台新机器,并在同一台机器上克隆了我的存储库.
现在,我希望对我的dotfiles进行一些更改,这些更改仅适用于此系统.我希望在我的存储库中忽略这些更改.
我应该继续跟踪和提交其他更改.
例如,在我的.gitconfig中,我有一个设置为:
[push]
default = simple
Run Code Online (Sandbox Code Playgroud)
现在,在我的新机器上,git的版本使用得很旧.它仍然不支持simplepush 的设置.所以,我想改变这一点,但仅限于本地.
但是,如果我对.gitconfig进行任何其他更改,我想跟踪这些.无论如何我能做到这一点?
编辑:
我知道git update-index --assume-unchanged.它的问题是git将不再跟踪我的文件,直到我反转它.然后,它将跟踪所有变化.
我希望忽略某些变化并跟踪其余变化.
我有一个数据库配置文件,其默认值不重要.但是,对此文件的任何更改都将包含不应在repo中跟踪的敏感信息.
我希望Git存储库的未来可以包含默认版本,但忽略任何用户所做的任何更改.
以下内容保留了本地配置,但将删除推送到repo导致将来拉出的问题.
cat "app/dir/config.file" >> .gitignore
git rm --cached app/dir/config.file
Run Code Online (Sandbox Code Playgroud)
以下是这项工作,但不会持续超过对回购的推动.
git update-index --assume-unchanged app/dir/config.file
Run Code Online (Sandbox Code Playgroud)
这似乎是围绕敏感信息进行版本控制的常见要求,但我似乎无法找到解决方案.
我已经多次阅读过这方面的文档了,我仍然没有完全理解这些不同命令之间的差异.也许这只是我,但文档可能更清晰:
http://git-scm.com/docs/gitignore
https://help.github.com/articles/ignoring-files
此外,很多关于这个主题的评论似乎使用了"索引","承诺","跟踪"等词语,有些松散,这使得这三者之间的差异不那么明显.
我当前(公认有限)的理解:
匹配的文件.gitignore将来不会被跟踪.(虽然它们之前可能已被跟踪过.)这意味着它们将不会在未来的git status列表中显示为已更改.
但是,未来的更改仍将与远程回购同步.换句话说,文件仍然是"索引"的,但它们没有被"跟踪".由于.gitignore文件位于项目目录中,因此可以对文件本身进行版本控制.
匹配的文件.git/info/exclude也不会被"跟踪".此外,这些文件永远不会被远程同步,因此永远不会被任何其他用户以任何形式看到.这些文件应该是特定于单个用户的编辑器或工作流的文件.因为它在.git
目录中,所以exclude文件本身不能进行版本控制.
已在其上assume-unchanged运行的文件也不会显示在git status或中git diff.这看起来很相似exclude,因为这些文件既没有"索引"也没有"跟踪".但是,之前要提交的文件的最后一个版本assume-unchanged对于repo中的所有用户仍然可见.
以上解释是否正确?请指正.
如果文件已经在提交中,那么在匹配.exclude和运行文件
之间的功能有何不同assume-unchanged?为什么一个人更喜欢另一种方法?
我的基本用例是我想避免在编译文件中对差异进行排序,但我仍然希望这些编译文件与源文件一起同步.将一个gitignore"d文件仍然推?如果没有,如何管理编译文件的最终部署?
在此先感谢您的帮助.
我在git存储库中有一个文件,它有一个本地更改.我想让git永远忽略本地更改,但不是文件.特别是,
git add .则永远不应该暂存它.git commit -a不应该提交它.有没有办法做到这一点?做一些研究,我读到了"涂抹/清洁周期",如果我读得正确,
我对git和脚本很新,(我是C#和Java经验的实习生),所以如果这就是我需要做的,请你发布详细的指示或链接到如何设置涂抹的教程/清洁周期?
背景:我希望我的工作分支与主干不同步.有一个低优先级的错误只影响开发机器,所以我们只是评论出有问题的代码,而不是修复它.显然,我们不希望从生产中删除此代码,它可以正常工作.