Sourcetree中的.gitignore文件无法正常工作

时间:2014-02-06 23:41:45

标签: git atlassian-sourcetree sourcetree

我正在开发一个maven项目,我想忽略生成并存储在我的项目(Evaluation)根文件夹的/ target文件夹中的文件。在我的git存储库的根目录中,我有一个带有以下内容的.gitignore文件条目(后端只是一个包含eclipse项目评估的文件夹)

backend/Evaluation/logs/
backend/Evaluation/target/

由于某些原因,SourceTree不会忽略存储在这两个文件夹中的文件,当我编译项目时,会有一些未提交的更改,这些更改是/ target文件夹中的一些.class文件。

为什么会这样?我还尝试将.gitignore条目更改为

  

/后端/评估/日志/ **

但它也没有用。

有什么想法吗?

7 个答案:

答案 0 :(得分:124)

因为问题中有Sourcetree标记,我会回答你如何使用Sourcetree ,这非常简单。

如前所述,首先必须从跟踪中删除文件,然后让Sourcetree忽略该文件。

  1. 更改文件中的内容,以便向您显示或从"文件状态"中选择它。打开存储库底部的选项卡。
  2. 右键单击该文件,您会看到"忽略...",但它显示为灰色,因为如上所述,它已经在跟踪。
  3. 右键单击该文件,然后选择"停止跟踪"
  4. 该文件将显示一个红色按钮,表示它将被删除(来自跟踪)
  5. 同一文件的新条目将显示在"文件状态"带有蓝色问号表示新文件(新文件,因为您说从4中跟踪中删除)
  6. 右键单击5中的文件,现在您看到"忽略..."能够选择。单击它,Sourcetree将在.gitignore文件中为该文件添加一个新条目
  7. 如果单击"设置"您可以看到.gitignore文件。在右上角,选择" advanced"然后第一个条目是关于忽略文件,点击"编辑"这将是开放的。

答案 1 :(得分:96)

我们说我们有一个无意中添加到我们的存储库的文件:

stackoverflow$ echo this file is important > junkfile
stackoverflow$ git add junkfile
stackoverflow$ git ci -m 'added a file'

在某些时候,我们意识到该文件并不重要,因此我们将其添加到.gitignore文件中:

stackoverflow$ echo junkfile >> .gitignore
stackoverflow$ git ci -m 'ignore junkfile' .gitignore

稍后,我们对该文件进行了一些更改:

stackoverflow$ sed -i 's/ is / is not/' junkfile 

当然,即使文件列在.gitignore中,我们已经告诉git我们要跟踪它,因此git status显示:

stackoverflow$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   junkfile
#
no changes added to commit (use "git add" and/or "git commit -a")

我们需要从存储库中删除此文件(不从我们的工作树中删除该文件)。我们可以使用--cached标记git rm来执行此操作:

stackoverflow$ git rm --cached junkfile
rm 'junkfile'

此阶段delete操作...

stackoverflow$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    junkfile
#

...所以我们需要提交它:

stackoverflow$ git commit -m 'removed junkfile from repository'
[master 19f082a] removed junkfile from repository
 1 file changed, 1 deletion(-)
 delete mode 100644 junkfile

现在如果我们运行git status git将忽略此文件:

stackoverflow$ git status
# On branch master
nothing to commit, working directory clean

即使它仍在我们的工作树中:

stackoverflow$ cat junkfile 
this file is not important

答案 2 :(得分:11)

我在跟踪bin文件夹时遇到问题(整个文件夹)。

所以这里是快速步骤(更直观,因为我更像是一个视觉类型的人):

  1. 出于安全考虑,我压缩了整个bin文件夹
  2. 将其移至桌面
  3. 将(当前).gitignore移动到桌面
  4. 删除整个BIN文件夹
  5. 提交更改(通过喜爱的git提交工具)
  6. 提交,推送,完成!
  7. 返回基本项目的文件夹
  8. 移回.gitignore文件
  9. 可选 - 也可以向后移动(解压缩)bin文件夹。
  10. 因此,您将看到git工具不再跟踪bin文件夹中的更改。
  11. 我希望这有助于某人。

答案 3 :(得分:11)

如果文件已经添加或提交到您的Git存储库,您必须先停止跟踪它们,然后才能被 .gitIgnore 忽略。

要停止在SourceTree中跟踪文件:

右键单击文件。选择“停止跟踪”。
这不会删除你的文件,只是停止跟踪它们

要停止从命令行跟踪文件:

git rm --cached example.txt

答案 4 :(得分:2)

除了上面已经提供的答案之外,还要注意如果.gitignore文件不在根文件夹中,它将无效。

我有一个项目.gitignore在这里/projectname/.gitignore,因此没有被阅读。所以我把它移到/.gitignore,一切都很好。

答案 5 :(得分:0)

这对我有用:

git update-index --assume-unchanged some.file

答案 6 :(得分:0)

为此付出了几个小时的时间,尝试了许多事情,包括此处的建议-无济于事...最终对我有用的是在位桶中设置回购协议时创建.gitignore文件。 org ,将该文件拖到本地,粘贴了我自己尝试创建的文件的完全相同的内容,现在终于可以正常工作了。