我知道.gitignore文件隐藏了Git版本控制中指定的文件.我有一个项目(LaTeX),它在运行时会生成许多额外的文件(.auth,.dvi,.pdf,日志等),但我不希望这些文件被跟踪.
我知道我可以(也许应该)这样做所有这些文件放在项目中的一个单独的子文件夹中,因为我可以忽略该文件夹.
但是,有没有可行的方法将输出文件保存在项目树的根目录中,并使用.gitignore忽略除了我用Git跟踪的文件之外的所有内容?就像是
# Ignore everything
*
# But not these files...
script.pl
template.latex
# etc...
Run Code Online (Sandbox Code Playgroud) 我想忽略我的存储库中的所有文件,除了bin
子目录中出现的文件.我尝试将以下内容添加到我的.gitignore
:
*
!bin/*
Run Code Online (Sandbox Code Playgroud)
然而,这并没有产生预期的效果:我在里面创建了一个新文件bin/
,但git status
仍在显示nothing to commit (working directory clean)
.
有什么建议?
我正在尝试解决大型目录结构上的gitignore问题,但为了简化我的问题,我已将其减少到以下内容.
我在一个全新的git存储库中有两个文件(foo,bar)的以下目录结构(到目前为止没有提交):
a/b/c/foo
a/b/c/bar
Run Code Online (Sandbox Code Playgroud)
显然,'git status -u'显示:
# Untracked files:
...
# a/b/c/bar
# a/b/c/foo
Run Code Online (Sandbox Code Playgroud)
我想要做的是创建一个.gitignore文件,忽略/ b/c中的所有内容但不忽略文件'foo'.
如果我创建一个.gitignore:
c/
Run Code Online (Sandbox Code Playgroud)
然后'git status -u'显示foo和bar都被忽略:
# Untracked files:
...
# .gitignore
Run Code Online (Sandbox Code Playgroud)
这是我所期待的.
现在,如果我为foo添加排除规则,那么:
c/
!foo
Run Code Online (Sandbox Code Playgroud)
根据gitignore手册页,我希望这可行.但它没有 - 它仍然忽略了foo:
# Untracked files:
...
# .gitignore
Run Code Online (Sandbox Code Playgroud)
这也不起作用:
c/
!a/b/c/foo
Run Code Online (Sandbox Code Playgroud)
这也不是:
c/*
!foo
Run Code Online (Sandbox Code Playgroud)
得到:
# Untracked files:
...
# .gitignore
# a/b/c/bar
# a/b/c/foo
Run Code Online (Sandbox Code Playgroud)
在这种情况下,虽然不再忽略foo,但也不会忽略bar.
.gitignore中规则的顺序似乎也不重要.
这也不符合我的期望:
a/b/c/
!a/b/c/foo
Run Code Online (Sandbox Code Playgroud)
那个人忽略了foo和bar.
一种有效的方法是,如果我创建文件a/b/c/.gitignore并放入其中:
*
!foo
Run Code Online (Sandbox Code Playgroud)
但问题是最终在/ b/c下会有其他子目录,我不想在每一个中都放一个单独的.gitignore - 我希望创建'基于项目'.gitignore可以位于每个项目的顶级目录中的文件,并覆盖所有"标准"子目录结构.
这似乎也是等价的:
a/b/c/*
!a/b/c/foo
Run Code Online (Sandbox Code Playgroud)
这可能是我可以实现的最接近"工作"的东西,但需要说明完整的相对路径和明确的异常,如果我在不同级别有很多名为'foo'的文件,那将会很痛苦子目录树的.
无论如何,要么我不太明白排除规则是如何工作的,要么当目录(而不是通配符)被忽略时它们根本不起作用 - 以一个以/结尾的规则
任何人都可以对此有所了解吗?
有没有办法让gitignore使用像正则表达式那样合理的东西而不是这种笨拙的基于shell的语法? …
我的问题是我的git仓库里有一堆WordPress网站,其中我想有选择地只提交我themes
文件夹的内容,而忽略了WordPress中的其余冗余文件.
我之前使用.gitignore文件来忽略文件类型,但它可以反过来使用 - 即忽略一切但是某个文件夹路径?
root(git repo)
- /wordpress
- - /(WordPress Site 1)/ wp-content/themes
- - /(WordPress Site 2)/ wp-content/themes
- - /(WordPress Site 3)/ wp-content/themes
谢谢-
更新:
根据答案我做了以下,但它不起作用.有任何想法吗?
# Ignore everything:
*
# Except for wordpress themes:
!*/wp-content/themes/*
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下变化:
!*/wp-content/themes*
!*wp-content/themes/*
!wp-content/themes/*
!/wordpress/*/wp-content/themes*
!wordpress/*/wp-content/themes*
Run Code Online (Sandbox Code Playgroud)
这些都没有读取我的themes
文件夹.
就像标题所说,是否可以在gitignore文件中添加"没有点的文件"?
我想这将照顾所有那些烦人的无扩展文件.
我正在尝试为使用NuGet的Visual Studio项目创建.gitignore.它目前包含:
\packages/*
!packages/repositories.config
Run Code Online (Sandbox Code Playgroud)
这不会忽略文件夹中的任何内容.一切都在添加上演.我也尝试过:
packages/
!packages/repositories.config
Run Code Online (Sandbox Code Playgroud)
这会忽略packages文件夹中的所有内容,并且不包含packages/repositories.config.
我究竟做错了什么?
我试图使用带有否定模式的.gitignore文件(以!开头的行),但它没有按照我期望的方式工作.
作为一个最小的例子,我有以下目录结构:
C:/gittest
-- .gitignore
-- aaa/
-- bbb/
-- file.txt
-- ccc/
-- otherfile.txt
Run Code Online (Sandbox Code Playgroud)
在我的gitignore文件中,我有这个:
aaa/
!aaa/ccc/
Run Code Online (Sandbox Code Playgroud)
我的理解(基于这个doc页面)是文件aaa/ccc/otherfile.txt不应该被忽略,但实际上git忽略了aaa下的所有内容.
我误解了这句话:"一个可选的前缀!否定了模式;先前模式排除的任何匹配文件将再次被包括在内."?
顺便说一下,这是在Windows上使用msysgit 1.7.0.2.
它需要有一个Intellij Idea拼写检查词典,它符合以下要求:
据我所知,Idea中有两种类型的词典:
但它们都不符合要求.
用户词典易于编辑(Alt + Enter"保存...到词典")并且可以添加到VCS,但它有一个预定义的用户名,因此无法共享(例如开发人员A共享他的A.xml,但是开发人员B无法使用它,因为他的Idea项目仅适用于B.xml)
自定义词典没有共享问题,但应手动编辑,需要重新启动Idea才能应用更改(例如让它看到新词)
我没有找到一个插件来解决这个问题或任何类似的问题,这让我觉得没有人需要这样的字典,或者答案太明显了.
那么,有什么办法吗?
如何切换分支时摆脱子模块.我不明白为什么git clean说它删除了子模块但没有.这是一个错误吗?下面是剪切和粘贴步骤来重现.
git --version
git version 1.7.8.4
git init submod
cd submod
echo "This is a submodule" > README.txt
git add .
git commit -m "Initial commit"
cd ..
git init prog
cd prog
echo "This is a program" > README.txt
git add .
git commit -a -m "Initial commit"
git checkout -b topic1
git submodule add ../submod
git commit -m "Added submodule"
git checkout master
#warning: unable to rmdir submod: Directory not empty
#Switched to branch 'master'
git status …
Run Code Online (Sandbox Code Playgroud) 我想忽略下面和文件夹中的所有文件,除了特定文件类型可能在文件夹层次结构中的某个位置:
例
/Test
/Test/unknown/folder/structure/below
Run Code Online (Sandbox Code Playgroud)
现在我想忽略文件Test
夹内部和下面的所有文件,除了某个名为的css文件layout.css
,例如:
/Test/layout.css
/Test/fileto.ignore
/Test/another/folder/ig.nore
/Test/in/a/unknown/folder/layout.css
/Test/in/a/unknown/folder/ignore.me
Run Code Online (Sandbox Code Playgroud)
.gitignore应该忽略
/Test/fileto.ignore
/Test/another/folder/ig.nore
/Test/in/a/unknown/folder/ignore.me
Run Code Online (Sandbox Code Playgroud)
我的.gitignore文件不起作用:
Test/
!layout.css
Run Code Online (Sandbox Code Playgroud)
有什么建议?