我有文件夹application /我添加到.gitignore。应用程序/文件夹内是文件夹application / language / gr。我该如何包含此文件夹? 我试过这个
application/
!application/language/gr/
没有运气......
答案 0 :(得分:1315)
如果您排除application/
,那么其下的所有内容将始终被排除(即使某些后来的否定排除模式(“unignore”)可能与application/
下的内容匹配)。
要做你想做的事,你必须“取消”你想要“unignore”的任何东西的父目录。通常你最终会成对编写这种情况的规则:忽略目录中的所有内容,但不是某些某个子目录。
# you can skip this first one if it is not already excluded by prior patterns
!application/
application/*
!application/language/
application/language/*
!application/language/gr/
注意强>
尾随/*
非常重要:
dir/
排除名为dir
的目录和(隐式)其下的所有内容。dir/
时,Git永远不会查看dir
下的任何内容,因此永远不会将任何“取消排除”模式应用于dir
下的任何内容。dir/*
对dir
本身一无所知;它只是排除dir
下的所有内容。
使用dir/*
,Git将处理dir
的直接内容,使其他模式有机会“取消排除”某些内容(!dir/sub/
)。 答案 1 :(得分:117)
Karsten Blees (kblees)澄清了这个案例:
gitignore.txt
:澄清排除目录的递归性质可选前缀"
!
"否定了这种模式;之前模式排除的任何匹配文件将再次包含在内。如果排除该文件的父目录,则无法重新包含文件。 (
*
)
(*
:除非在git 2.8+中满足某些条件,请参阅下文)
由于性能原因,Git没有列出被排除的目录,因此无论在何处定义文件,所包含文件的任何模式都无效。在第一个"
\
"前面放一个反斜杠("!
")对于以文字"!
"开头的模式,例如"\!important!.txt
"。排除除特定目录
foo/bar
以外的所有内容的示例(注意/*
- 没有斜杠,通配符也会排除foo/bar
内的所有内容:
--------------------------------------------------------------
$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
--------------------------------------------------------------
在你的情况下:
application/*
!application/**/
application/language/*
!application/language/**/
!application/language/gr/**
在能够列出给定文件夹中的文件之前,您必须首先将文件夹列入白名单。
2016年2月/ 3月更新:
请注意,使用git 2.9.x / 2.10(2016年中期?),如果排除该文件的父目录if there is no wildcard in the path re-included,则可能会重新包含文件。
Nguyễn Thái Ngọc Duy (pclouds
)正在尝试添加此功能:
因此,使用git 2.9+,这可能实际上有效,但最终还原了:
application/
!application/language/gr/
答案 2 :(得分:44)
@Chris Johnsen的答案很棒,但是对于更新版本的Git(1.8.2或更高版本),你可以使用双星号模式来获得更简便的解决方案:
# assuming the root folder you want to ignore is 'application'
application/**/*
# the subfolder(s) you want to track:
!application/language/gr/
这样您就不必“unignore”您要跟踪的子文件夹的父目录。
使用Git 2.17.0(不确定在此版本之前的早期版本。可能回到1.8.2),使用**
模式结合排除每个子目录导致文件工作。例如:
# assuming the root folder you want to ignore is 'application'
application/**
# Explicitly track certain content nested in the 'application' folder:
!application/language/
!application/language/gr/
!application/language/gr/** # Example adding all files & folder in the 'gr' folder
!application/language/gr/SomeFile.txt # Example adding specific file in the 'gr' folder
答案 3 :(得分:8)
我发现只有实际有效。
**/node_modules/*
!**/node_modules/keep-dir
答案 4 :(得分:4)
因此,由于许多程序员使用节点。遇到此问题的用例是排除node_modules
除了一个模块module-a
,例如:
!node_modules/
node_modules/*
!node_modules/module-a/
答案 5 :(得分:3)
另一个走下目录结构以获得您想要的内容的示例。注意:我没有排除Library/
但Library/**/*
# .gitignore file
Library/**/*
!Library/Application Support/
!Library/Application Support/Sublime Text 3/
!Library/Application Support/Sublime Text 3/Packages/
!Library/Application Support/Sublime Text 3/Packages/User/
!Library/Application Support/Sublime Text 3/Packages/User/*macro
!Library/Application Support/Sublime Text 3/Packages/User/*snippet
!Library/Application Support/Sublime Text 3/Packages/User/*settings
!Library/Application Support/Sublime Text 3/Packages/User/*keymap
!Library/Application Support/Sublime Text 3/Packages/User/*theme
!Library/Application Support/Sublime Text 3/Packages/User/**/
!Library/Application Support/Sublime Text 3/Packages/User/**/*macro
!Library/Application Support/Sublime Text 3/Packages/User/**/*snippet
!Library/Application Support/Sublime Text 3/Packages/User/**/*settings
!Library/Application Support/Sublime Text 3/Packages/User/**/*keymap
!Library/Application Support/Sublime Text 3/Packages/User/**/*theme
> git add Library
> git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: Library/Application Support/Sublime Text 3/Packages/User/Default (OSX).sublime-keymap
new file: Library/Application Support/Sublime Text 3/Packages/User/ElixirSublime.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/Package Control.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/Preferences.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/RESTer.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/SublimeLinter/Monokai (SL).tmTheme
new file: Library/Application Support/Sublime Text 3/Packages/User/TextPastryHistory.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/ZenTabs.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/adrian-comment.sublime-macro
new file: Library/Application Support/Sublime Text 3/Packages/User/json-pretty-generate.sublime-snippet
new file: Library/Application Support/Sublime Text 3/Packages/User/raise-exception.sublime-snippet
new file: Library/Application Support/Sublime Text 3/Packages/User/trailing_spaces.sublime-settings
答案 6 :(得分:3)
特别是对于较旧的Git版本,大多数建议都不会很好。 如果是这种情况,我会在我希望包含内容的目录中放置一个单独的.gitignore,而不管其他设置如何,并允许在那里需要。
例如: /.gitignore
# ignore all .dll files
*.dll
/dependency_files/.gitignore
# include everything
!*
所以/ dependency_files(甚至.dll文件)中的所有内容都包含在内。
答案 7 :(得分:3)
我在这里找到了类似的情况,默认情况下,在laravel中,.gitignore
忽略所有使用asterix,然后覆盖公共目录。
*
!public
!.gitignore
如果您遇到OP场景,这还不够。
如果您要提交public
的特定子文件夹,请例如在您的public/products
目录中,您希望包含一个子文件夹深的文件,例如要包含public/products/a/b.jpg
,即使您专门添加!/public/products
,!public/products/*
等,也无法正确检测到它们。
解决方案是确保为每个路径级别添加一个条目来覆盖它们。
*
!.gitignore
!public/
!public/*/
!public/products/
!public/products/*
!public/products/*/
!public/products/*/
!public/products/*/*
答案 8 :(得分:2)
在WordPress中,这对我有所帮助:
wp-admin/
wp-includes/
/wp-content/*
!wp-content/plugins/
/wp-content/plugins/*
!/wp-content/plugins/plugin-name/
!/wp-content/plugins/plugin-name/*.*
!/wp-content/plugins/plugin-name/**
答案 9 :(得分:2)
我经常在CLI中使用此变通办法,在此我不用配置.gitignore
,而是创建一个单独的 .include
文件,在其中定义要包含的(子)目录尽管目录被.gitignore
直接或递归忽略。
因此,我还使用
git add `cat .include`
在暂存期间,在提交之前。
对于OP,我建议使用带有以下行的.include
:
<parent_folder_path>/application/language/gr/*
注意:使用cat
不允许使用别名.include
中来指定$ HOME(或任何其他特定目录)。这是因为homedir/app1/*
行
当使用上述命令传递给git add
时,显示为git add 'homedir/app1/*'
,并且将字符括在单引号('')中会保留引号内每个字符的文字值,从而防止出现别名(例如 homedir )(请参见Bash Single Quotes)。
以下是我在仓库here中使用的.include
文件的示例。
/home/abhirup/token.txt
/home/abhirup/.include
/home/abhirup/.vim/*
/home/abhirup/.viminfo
/home/abhirup/.bashrc
/home/abhirup/.vimrc
/home/abhirup/.condarc
答案 10 :(得分:2)
添加其他答案:
!/.vs/ <== include this folder to source control, folder only, nothing else
/.vs/* <== but ignore all files and sub-folder inside this folder
!/.vs/ProjectSettings.json <== but include this file to source control
!/.vs/config/ <== then include this folder to source control, folder only, nothing else
!/.vs/config/* <== then include all files inside the folder
结果如下:
答案 11 :(得分:2)
gitignore-指定要忽略的故意未跟踪的文件。
排除特定目录 foo / bar 以外的所有内容的示例(请注意 / * -不带斜杠,通配符还将排除 foo /栏):
class CustomWKWebViewController: UIViewController {
private func settingWebView() -> WKWebView {
let userScript = WKUserScript(source: source, injectionTime: .atDocumentStart, forMainFrameOnly: true)
let userContentController = WKUserContentController()
userContentController.add(self, name: "Login")
userContentController.add(self, name: "Other")
userContentController.add(self, name: “LD”)
userContentController.addUserScript(userScript)
let config = WKWebViewConfiguration()
config.userContentController = userContentController
webView = WKWebView(frame: .zero, configuration: config)
webView!.navigationDelegate = self
webView!.uiDelegate = self
webView!.scrollView.bounces = false
webView!.allowsBackForwardNavigationGestures = true
webView!.backgroundColor = .clear
webView!.scrollView.backgroundColor = .clear
if let request = getRequest() {
webView!.load(request)
}
return webView!
}
func reloadWebView(url: URL?) {
if let url = url, let webView = self.webView {
var requestForBlank = URLRequest(url: URL(string: "about:blank")!, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 3)
requestForBlank.httpMethod = "POST"
var request = URLRequest(url: url, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 3)
request.httpMethod = "POST"
webView.load(requestForBlank)
webView.load(request)//breakpoint always break here, but the view don't load request.
}
}
}
WordPress 的另一个示例:
$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
更多信息,请点击此处:https://git-scm.com/docs/gitignore
答案 12 :(得分:2)
最简单也是最好的方法是尝试手动添加文件(通常优先于.gitignore
样式的规则):
git add /path/to/module
您甚至可能希望添加-N
意图标志,建议您将添加它们,但不是立即添加。我经常对尚不准备上演的新文件执行此操作。
这是copy of an answer上关于轻松进行重复质量检查的文章。我将其重新发布在此处以提高可见性-我发现不用一堆gitignore规则会更容易。
答案 13 :(得分:0)
我想跟踪jquery生产js文件,这很有效:
node_modules/*
!node_modules/jquery
node_modules/jquery/*
!node_modules/jquery/dist/*
答案 14 :(得分:0)
我的JetBrains IntelliJ IDEA .gitignore配置,其中我需要排除.idea
以外的.idea/runConfigurations
文件夹:
.idea
!.idea/
.idea/*
!.idea/runConfigurations/
请参阅:https://github.com/daggerok/gitignore-idea-runConfigurations
答案 15 :(得分:0)
这对我有用:
xdotool key Arabic_0