让.gitignore忽略除几个文件以外的所有内容

我知道一个.gitignore文件隐藏了Git版本控制中的指定文件。 我有一个项目(LaTeX)在运行时会生成大量额外的文件(.auth,.dvi,.pdf,日志等),但是我不希望跟踪这些文件。

我知道我可以(也许应该),使所有这些文件被放在项目中的一个单独的子文件夹,因为我可以然后就忽略该文件夹。

但是,是否有任何可行的方法来保持输出文件在项目树的根目录,并使用.gitignore忽略除了我跟踪的文件的所有东西? 就像是

# Ignore everything * # But not these files... script.pl template.latex # etc... 

一个可选的前缀! 否定了这种模式; 任何先前模式排除的匹配文件将再次包含在内。 如果否定模式匹配,则将覆盖较低的优先模式源。

 # Ignore everything * # But not these files... !.gitignore !script.pl !template.latex # etc... # ...even if they are in subdirectories !*/ 

如果你想忽略一个目录的全部内容,除了其中的一个文件,你可以为文件path中的每个目录编写一对规则。 例如.gitignore忽略除pippo / pluto / paperino.xml之外的pippo文件夹

的.gitignore

 pippo/* !pippo/pluto pippo/pluto/* !pippo/pluto/paperino.xml 

你想在大多数情况下使用/*而不是**/

使用*是有效的,但它recursion地工作。 它不会再查看目录。 人们推荐使用!*/将目录再次列入白名单,但实际上最好使用/*将最高级别的文件夹列入黑名单/*

 # Blacklist files/folders in same directory as the .gitignore file /* # Whitelist some files !.gitignore !README.md # Ignore all files named .DS_Store or ending with .log **/.DS_Store **.log # Whitelist folder/a/b1/ and folder/a/b2/ # trailing "/" is optional for folders, may match file though. # "/" is NOT optional when followed by a * !folder/ folder/* !folder/a/ folder/a/* !folder/a/b1/ !folder/a/b2/ 

上面的代码会忽略除.gitignoreREADME.mdfolder/a/b1/folder/a/b2/以及这两个文件夹中包含的所有文件。 (并且.DS_Store*.log文件将在这些文件夹中被忽略。)

显然我可以做例如!/folder!/.gitignore

更多信息: http : //git-scm.com/docs/gitignore

更具体一点:

示例:忽略webroot/cache所有内容 – 但保留webroot/cache/.htaccess

注意cache文件夹后面的斜线(/):

失败

 webroot/cache* !webroot/cache/.htaccess 

作品

 webroot/cache/* !webroot/cache/.htaccess 
 # ignore these * # except foo !foo 

要忽略目录中的某些文件,您必须按照正确的顺序执行此操作:

例如,除了index.php和文件夹“config”之外,忽略文件夹“application”中的所有内容, 注意顺序

你必须首先否定你想要的。

失败

application/*

!application/config/*

!application/index.php

作品

!application/config/*

!application/index.php

application/*

你可以使用git config status.showUntrackedFiles no ,所有未跟踪的文件将被隐藏。 有关详细信息,请参阅man git-config

要从.gitignore中排除文件夹,可以执行以下操作。

 !app/ app/* !app/bower_components/ app/bower_components/* !app/bower_components/highcharts/ 

这将忽略除/highcharts以外的所有bower_components文件/子文件夹。

还有一些类似的问题,所以我会发表我之前写的:

我得到这个在我的机器上工作的唯一方法就是这样做:

 # Ignore all directories, and all sub-directories, and it's contents: */* #Now ignore all files in the current directory #(This fails to ignore files without a ".", for example #'file.txt' works, but #'file' doesn't): *.* #Only Include these specific directories and subdirectories and files if you wish: !wordpress/somefile.jpg !wordpress/ !wordpress/*/ !wordpress/*/wp-content/ !wordpress/*/wp-content/themes/ !wordpress/*/wp-content/themes/* !wordpress/*/wp-content/themes/*/* !wordpress/*/wp-content/themes/*/*/* !wordpress/*/wp-content/themes/*/*/*/* !wordpress/*/wp-content/themes/*/*/*/*/* 

请注意,您必须明确允许您要包含的每个级别的内容。 因此,如果我在主题下有深层次的子目录5,我仍然需要把它拼出来。

这是@ Yarin在这里的评论: https : //stackoverflow.com/a/5250314/1696153

这些是有用的话题:

  • .gitignore中的否定模式如何工作?
  • gitignore排除规则如何实际工作?

我也试过了

 * */* **/** 

**/wp-content/themes/**

/wp-content/themes/**/*

没有任何一个对我有用, 很多线索和错误!

我有jquery和angular从凉亭。 鲍尔安装了他们

 /public_html/bower_components/jquery/dist/bunch-of-jquery-files /public_html/bower_components/jquery/src/bunch-of-jquery-source-files /public_html/bower_components/angular/angular-files 

最小化的jquery位于dist目录内,而angular位于angular目录内。 我只需要最小化的文件被提交给github。 有些篡改.gitignore,这是我设法变出…

 /public_html/bower_components/jquery/* !public_html/bower_components/jquery/dist /public_html/bower_components/jquery/dist/* !public_html/bower_components/jquery/dist/jquery.min.js /public_html/bower_components/angular/* !public_html/bower_components/angular/angular.min.js 

希望有人能find这个有用的。

这就是为我工作,我只想提交一个Cordova插件回购:

 ... plugins/* !plugins/cordova-plugin-app-customization