让.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/
上面的代码会忽略除.gitignore
, README.md
, folder/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