Ignoring directories in Git repos on Windows
如何在Windows上使用msysgit忽略git中的目录或文件夹?
在项目目录中创建名为
1 | dir_to_ignore/ |
更多信息。
默认情况下,当文件名为
Git不使用
而且不能将文件重命名为
非命令行解决方案:
1 | You can rename a file to".gitignore." and it will create".gitignore" |
对于忽略文件和目录,有两种主要方法:
.git忽略
- 将
.gitignore 文件放在.git 文件夹旁边的repo根目录中(在Windows中,确保看到真正的文件扩展名,然后生成.gitignore. (点在末尾,使文件扩展名为空) - 生成全局配置
~/.gitignore_global 并运行git config --global core.excludesfile ~/.gitignore_global 将其添加到Git配置中
注意:以前跟踪的文件可以通过运行
repo exclude-对于不需要共享的本地文件,只需将文件模式或目录添加到文件
[更新]要在被忽略文件列表中进行异常,请参阅此问题。
我在Windows资源管理器中用创建文件时遇到一些问题。开始的时候。
解决方法是进入commandshell并使用"edit"创建一个新文件。
要指示Git忽略某些文件或文件夹,必须创建
但是在Windows资源管理器中,您必须为文件提供一个名称,您不能只使用扩展名来创建文件,诀窍是创建一个空文本文件并转到命令提示符,将文件名更改为
1 | ren"New Text Document.txt" .gitignore |
号
现在,用您最喜欢的文本编辑器打开文件,并添加您希望忽略的文件/文件夹名称。您也可以使用像这样的通配符
希望它能回答你的问题
如果您想要维护一个文件夹而不是其中的文件,只需将一个".gitignore"文件放在以"*"作为内容的文件夹中。此文件将忽略存储库中的所有内容。但你的回购协议中会包括
1 | $ git add path/to/folder/.gitignore |
如果添加空文件夹,则会收到此消息(.gitignore是隐藏文件)
1 2 3 4 | The following paths are ignored by one of your .gitignore files: path/to/folder/.gitignore Use -f if you really want to add them. fatal: no files added |
。
因此,使用"-f"强制添加:
1 | $ git add path/to/folder/.gitignore -f |
在窗户上有一个额外的斜杠。排除.gitignore中的单个目录
dir_to_exclude/
号
可能有效,但排除所有目录
/
号
当目录中的文件名带有空格(如
要排除所有目录,最好使用:
**/
号
两个连续的asterics表示目录内容。
另外,在您的
要忽略git中的整个目录,最简单的方法是在目标目录中包含一个.git ignore文件,该文件只包含"*"
举例说明,
示例系统
1 2 3 4 5 6 7 8 9 | /root/ .gitignore /dirA/ someFile1.txt someFile2.txt /dirB/ .gitignore someFile3.txt someFile4.txt |
号
目标
- 忽略/dirb的内容/
顶级.gitignore(/root/.gitignore)
- 这是你的标准gitignore信息的去处
忽略的目录.gitignore(/root/dirb.gitignore)
- 此文件的读取名为"*",目录本身和所有文件都被完全忽略!
就这么简单:)
为了防止需要排除子文件夹,可以使用
1 | **/build/output/Debug/ |
您可以创建包含以下内容的".gitignore"文件:
1 2 | * !.gitignore |
它对我和傻子都有效。
我在让Git获取Windows上的.gitignore文件时遇到了一些问题。但是$git_dir/info/exclude文件似乎总是有效的。但是,这种方法的缺点是$git_dir目录中的文件不包括在签入中,因此不共享。
(p.s.$git_dir通常是名为.git的隐藏文件夹)
当其他一切都失败时,尝试编辑文件
/.git/info/exclude
号
并将您想要的目录添加到文件末尾,如下所示:
1 2 3 4 5 6 7 8 | # git ls-files --others --exclude-from=.git/info/exclude # Lines that start with '#' are comments. # For a project mostly in C, the following would be a good set of # exclude patterns (uncomment them if you want to use them): # *.[oa] # *~ assets/ compiled/ |
。
我将文件夹"assets"和"compiled"添加到要忽略的文件和目录列表中。
我想问题是你的工作树是这样的:
1 2 3 4 5 6 | a-cache/foo a-cache/index.html b-cache/bar b-cache/foo b-cache/index.html .gitignore |
。
…用你描述的
1 2 3 4 5 6 7 8 | $ git status # On branch master # Untracked files: # (use"git add <file>..." to include in what will be committed) # # .gitignore # a-cache/ # b-cache/ |
…如果
1 2 | git add *cache/index.html git commit -m"Adding index.html files to the cache directories" |
。
…你的
1 2 3 4 5 6 7 | $ git status # On branch master # Untracked files: # (use"git add <file>..." to include in what will be committed) # # .gitignore nothing added to commit but untracked files present (use"git add" to track) |
。
(显然,您也希望提交
在Unix上:
1 | touch .gitignore |
在Windows上:
1 | echo > .gitignore |
。
在终端中执行的这些命令将在当前位置创建一个
然后只需向这个
更多信息:https://www.atlassian.com/git/tutorials/saving-changes/gitignore
在Windows和Mac上,如果要忽略当前目录中名为flower_data_文件夹的文件夹,可以执行以下操作:
echo Flower_Data_Folder >> .gitignore
号
如果是名为data.txt的文件
echo data.txt >> .gitignore
号
如果它的路径类似于"data/passwords.txt"
echo"Data/passwords.txt">> .gitignore.
号
我也遇到过类似的问题,我在一个Windows工具链上工作,与Linux用户共享repo,他们在一个给定的文件夹中创建了同名(除了case)的文件。
其效果是,我可以克隆repo,并且立即拥有数十个"修改过的"文件,如果我签入这些文件,将会造成严重的破坏。
我将Windows设置为区分大小写,将Git设置为不忽略大小写,但它仍然失败(显然在win32 api调用中)。
如果我忽略这些文件,那么我必须记住不要跟踪.gitignore文件。
但我在这里找到了一个很好的答案http://archive.robwilkerson.org/2010/03/02/git-tip-ignore-changes-to-tracked-files/index.html
克里斯