如何在不删除文件的情况下将文件添加到我的.gitignore?

时间:2017-03-15 11:57:37

标签: git gitignore

我的项目中有一个特定于服务器的配置文件,因此不希望每次部署时都包含在Git中,因为它会覆盖服务器的设置。为解决这个问题,该文件已从Git中删除...好主意但现在每次部署项目时都会删除服务器配置文件。

所以我现在遇到了问题。我真正想要的是.gitignore中的文件并且从未添加到项目中,但是一旦添加它,我就无法看到从项目中删除它的方法,而不会触发删除每次部署的现有文件。

我是否可以在不删除项目的情况下从项目中删除文件。有效地回顾性地忽略已经添加的文件?

4 个答案:

答案 0 :(得分:0)

您可以在.gitignore文件中指定不需要的文件。因此Git将忽略对指定文件的任何更改。

如果您没有.gitignore文件,只需创建它,然后输入要忽略的文件名即可。请记住,将.gitignore文件添加到存储库后,您必须提交该文件。这将指示Git忽略.gitignore文件中指定的文件。

简而言之。您在工作存储库中创建名为.gitignore的文件,并在其中列出要匹配的文件名或模式 例如如果我们想忽略所有.sql个文件。在.gitignore我们将输入以下内容:

*.sql

如果我们只想忽略一个文件,请说lib/util.php。 然后.gitignore将如下所示:

lib/util.php

您可以根据需要在.gitignore中指定多个文件名。

gitignore documentation

请注意,只有在@Mark Adelsberger和@torek正确记录的情况下才开始在存储库中跟踪文件时,这将起作用。

答案 1 :(得分:0)

使用git log --oneline打印提交日志列表,然后启动git reset 'head'以取消暂存文件。然后,您可以在提交文件之前应用正确的.gitignore模板。  如果您尚未提交文件,则可以使用git rm --cached来取消暂存文件。  您可以从此github页面https://github.com/github/gitignore

中找到gitignore模板的集合

答案 2 :(得分:0)

“文件从未签入并且.gitignored”与“文件已签入然后rm-ed并且已经被.gitignored”之间的差异小于您推断的差异。 如果从未添加过该文件并将其放入.gitignore将按预期工作,然后删除了您可以将其放入.gitignore的文件,并且可能在一轮难度之后,它应该开始工作

(例如,如果您使用git pull来更新服务器,就会出现这种情况。删除文件的提交的 可能会删除该文件 - 尽管它应该显示为冲突。但随后的拉动将忽略该文件,特别是如果你已经将它添加到.gitignore。但我离题了,我在评论中掩盖了我的困惑......)

所以问题是如何从历史中删除文件,好像它从未被添加过,虽然我怀疑它会有所帮助,但是你可以这样做:

您必须“重写”引入该文件的提交(或提交),以及来自此类提交的任何提交。如果这是一个共享存储库,那么在重写之后,每个人都必须转换到重写 - 最容易通过让所有人放弃他们当前的repo并重新克隆来完成。这意味着你必须协调一个“无变化”窗口;如果某人确实在该窗口开头的截止点后进行了更改,则需要将其重新绑定到重写的树中。

现在,如果文件是最近添加的,并且在引入它的提交之后不存在大量历史记录,那么这可能是一个相对简单的过程,您甚至可以采取一些快捷方式。但通用解决方案是使用git filter-branch或BFG存储库清理程序。

在这两者中,BFG更容易,更快(因为这是它专门设计的任务之一)。它的作者认为唯一安全的过程是从当前提交中手动删除文件,测试当前提交中的所有内容是否按预期工作,然后使用BFG清理历史记录。我认为这是过于迂腐,并向他解释了为什么,但他坚持;所以你必须自己决定。

如果您选择使用filter-branch,则会使用索引过滤器;它是git过滤器文档中的一个库存示例,所以我只是在那里查找。

答案 3 :(得分:0)

解决此问题的简单而安全的方法是将要排除的文件添加到.gitignore

如果文件已被跟踪(之前已添加并已提交),您还需要从存储库中删除它。这可以通过告诉git仅删除跟踪版本而不删除您要保留的本地文件来完成。

git rm --cached <file>是执行此操作的命令。当您将更改与.gitignore更新一起提交时,存储库将停止跟踪并开始忽略该文件。