如何在Sourcetree中忽略Git仓库文件夹中的所有文件?

91

我有一个由Sourcetree管理的Bitbucket Git仓库。

我有两个文件夹需要提交,但因为它们只包含临时文件,所以需要忽略这些文件夹中的所有文件。

我该如何操作呢?

10个回答

161

对于Sourcetree用户:如果您想忽略特定文件夹,只需从该文件夹中选择一个文件,右键单击它,然后执行“忽略...”。您将看到一个弹出菜单,在这里您可以忽略“忽略<YOUR UNWANTED FOLDER>下的所有内容”

第一级菜单

第二级菜单

如果您发现“忽略”选项无法使用,您需要选择“停止跟踪”选项。之后,文件将被添加到Staged文件并带有红色背景图标上的减号和Unstaged files列表中的文件图标将更改为紫色背景上的问号。 现在,在Unstaged files列表中,“忽略”选项又可以使用了。只需按照上述操作即可。


14
如果文件夹已经提交,请先删除它,提交更改,然后按照上述步骤操作。 - RMorrisey
17
我发现“忽略”选项是灰色的,有人知道为什么吗? - Andrei Karcheuski
6
"Ignore"对我来说也变灰了。 - Micah Zoltu
1
@JoeLloyd 是的,它会添加到 Git 忽略列表中。你甚至可以像提交其他文件一样提交已创建/编辑的 Git 忽略文件。 - Kalzem
1
首先,在您忽略文件之前,您需要停止跟踪该文件。 - user10063119
显示剩余3条评论

54

将此添加到.gitignore:

*
!.gitignore

13
需要跟踪的每个文件夹内都应该添加这个文件。这个文件的存在会让 Git 跟踪该文件夹(通过跟踪该文件)。* 表示忽略所有文件,而 !.gitignore 表示不要忽略该文件本身。 - Billy Moon
2
正如Billy Moon所解释的那样,你可以在目录中创建.gitignore文件。这个文件告诉Git要忽略什么或不要忽略什么。谢谢。 - Gergo Erdosi
21
你在SourceTree中怎么做这件事? - 1.21 gigawatts
1
你不需要使用SourceTree,.gitignore是一个普通的文件,只需在要忽略内容的目录中创建它即可。 - Gergo Erdosi
你好,如果我们有一个项目的全局 gitignore 文件,该如何处理呢? - vigamage
1
如@AD7six所述,请勿将.gitignore添加到文件中,因为这是不必要的。 - Xcalibur

27

右键单击文件 → 忽略忽略其下所有内容

如果忽略选项无法使用,则:

  1. 先暂存一个文件
  2. 右键单击 → 停止跟踪
  3. 该文件将出现在下面的窗格中,带有问号 → 右键单击它→ 忽略

输入图片说明


7

在至少花费了一个小时的时间后,我提供这个答案来尝试扩展其他人所做的评论。要忽略一个文件夹/目录,请执行以下操作:如果您在项目的根目录中没有 .gitignore 文件(确切的名称为 ".gitignore"),请在要排除的文件夹中创建一个虚拟文本文件。在 Source Tree 中,右键单击它,然后选择“忽略”。您将获得一个弹出窗口,看起来像这样。

enter image description here

选择“Everything underneath”,然后从下拉列表中选择要忽略的文件夹。这将在您的根目录中创建一个.gitignore文件,并将文件夹规范放入其中。
如果您的根文件夹中已经有了.gitignore文件,则可以按照上述相同的方法进行操作,或者您可以编辑.gitignore文件并添加要排除的文件夹。它只是一个文本文件。请注意,它在路径名中使用正斜杠而不是反斜杠,因为我们Windows用户习惯于使用正斜杠。我尝试在Windows Explorer中手动创建.gitignore文本文件,但它不允许我创建没有名称(即只有扩展名)的文件。
请注意,添加 .gitignore 文件和文件规范对已经被跟踪的文件没有影响。如果您已经在跟踪这些文件,则必须停止跟踪它们。(右键单击文件夹或文件,然后选择停止跟踪。)然后,您将看到它们从绿色/干净或琥珀色/更改图标变为红色/已删除图标。在下一次提交时,文件将从存储库中删除,并以蓝色/已忽略图标显示。另一个贡献者问为什么某些文件的“忽略”选项被禁用,我认为这是因为他试图忽略一个已经被跟踪的文件。您只能忽略具有蓝色问号图标的文件。

在Windows中创建.gitignore文件,请使用Git bash命令“touch .gitignore”。 - Mikee
1
这里有个提示。答案说... "如果你已经在追踪这些文件,你需要停止追踪它们。(右键点击文件夹或文件,选择停止追踪。)"... 但是首先要如何在SourceTree中找到这个文件夹以便右键点击呢?答案:在Staged Files列表的左上方,有一个下拉菜单,上面写着:"Pending Files..."。选择它并选择"All Files"。然后你就可以选择文件夹/文件来停止追踪它们了。 - Ph0t0n

7
据我所知,Git只跟踪文件,而不是文件夹 - 因此无法提交空文件夹(或所有文件都被忽略的文件夹)。如果您需要该文件夹存在于您的构建过程中的某个步骤中,请考虑让构建工具创建它。或者您可以在文件夹中放置一个空的、未被忽略的文件并将其提交。

1
你的意思是说,如果我想要追踪文件夹,就必须添加一个“虚拟”的文件并忽略其余的文件? :-/ - rubdottocom
2
@rubdottocom:我认为是这样的;Git中存在文件夹只是因为其中包含的文件。你为什么需要将空文件夹纳入版本控制? - Aasmund Eldhuset
2
跟踪空文件夹有很多原因。您可能希望检出时该文件夹已准备好供人们使用,而无需逐个创建它们。您的代码可能依赖于某个特定文件夹的存在,例如一个期望上传的文件夹,如果该文件夹不存在,则无法将文件上传到那里等等... - Billy Moon
由 @AasmundEldhuset 解释的原因,Gergo 给出的答案具有正确的解决方案。 - Billy Moon
@BillyMoon:我同意可能有原因;我想知道他的特定需求是什么,这样我们才能建议最合适的解决方案。 :-) Gergo的技巧很巧妙,虽然它相当于向文件夹添加一个(或多或少)虚拟文件,就像我建议的那样。不过他的解决方案更符合Git的风格,所以给他点赞。 - Aasmund Eldhuset
嗨,是的,我想要跟踪的文件夹是/tmp文件夹,用于在进程执行期间创建临时文件,以及/uploads文件夹,该文件夹是应用程序所需的,但我不想跟踪测试上传的文件。正如Billy Moon所说,我想要一个可直接使用的项目。显然,我应该注意创建我需要但尚不存在的文件夹。 - rubdottocom

4

在源代码树上忽略整个文件夹。

   Just Open Repository >Repository setting > Edit git ignore File and 
   you can rite some thing like this :

 *.pdb 
*.bak 
*.dll
*.lib 
.gitignore
packages/ 
*/bin/
*/obj/ 

对于 bin 文件夹和 obj 文件夹,只需写上:*/bin/ */obj/。

4
如果您的“忽略”选项是灰色的,那么您必须在忽略文件之前停止追踪该文件。您只需右键单击该文件并点击“停止追踪”即可。
然后,它旁边应该出现一个蓝色图标。再次右键单击它并选择“忽略”。

4
正如其他人所提到的:git不跟踪文件夹,只跟踪文件。您可以使用以下命令(或等效逻辑)确保文件夹存在:
echo "*" > keepthisfolder/.gitignore
git add --force keepthisfolder/.gitignore
git commit -m "adding git ignore file to keepthisfolder"

文件的存在意味着任何检出存储库的人都将拥有该文件夹。
gitignore文件中的内容意味着其中任何内容都将被忽略。 您无需取消对.gitignore文件本身的忽略。这是一条规则,一旦提交就没有任何作用。 或者 如果您喜欢在同一位置保留所有忽略定义,可以在项目根目录中创建.gitignore文件,并添加以下内容:
*.tmp # example, ignore all .tmp files in any folder
path/to/keepthisfolder
path/to/keepthatfolder

并确保文件夹存在

touch path/to/keepthisfolder/anything
git add --force path/to/keepthisfolder/anything
git commit -m "ensure keepthisfolder exists when checked out"

“任何东西”可以是任何东西。常用的名称有.gitignore、.gitkeep、empty。

0
  • 在Sourcetree中使用Git忽略文件夹中的所有文件:

Ignore all files in folder with Git in Sourcetree


-1
在Sourcetree中:只需忽略指定文件夹中的一个文件。Sourcetree会询问您是否要忽略该文件夹中的所有文件。这很完美!

15
一个无意义的答案。因为你没有解释如何在Sourcetree中执行“ignore”操作! - Engineer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接