在Windows上忽略Git repos中的目录

Ignoring directories in Git repos on Windows

如何在Windows上使用msysgit忽略git中的目录或文件夹?


在项目目录中创建名为.gitignore的文件。通过在文件中输入目录名(附加斜杠)忽略目录:

1
dir_to_ignore/

更多信息。


默认情况下,当文件名为.gitignore.txt时,Windows资源管理器将显示.gitignore

Git不使用.gitignore.txt

而且不能将文件重命名为.gitignore,因为资源管理器认为它是一个没有名称的gitignore类型的文件。

非命令行解决方案:

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配置中

    注意:以前跟踪的文件可以通过运行git rm --cached filename来取消跟踪。

  • repo exclude-对于不需要共享的本地文件,只需将文件模式或目录添加到文件.git/info/exclude中即可。这些规则没有提交,因此其他用户看不到这些规则。更多信息请参阅此处。

  • [更新]要在被忽略文件列表中进行异常,请参阅此问题。


    我在Windows资源管理器中用创建文件时遇到一些问题。开始的时候。

    解决方法是进入commandshell并使用"edit"创建一个新文件。


    要指示Git忽略某些文件或文件夹,必须创建.gitignore文件。

    但是在Windows资源管理器中,您必须为文件提供一个名称,您不能只使用扩展名来创建文件,诀窍是创建一个空文本文件并转到命令提示符,将文件名更改为.gitignore

    1
    ren"New Text Document.txt" .gitignore

    现在,用您最喜欢的文本编辑器打开文件,并添加您希望忽略的文件/文件夹名称。您也可以使用像这样的通配符*.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/

    可能有效,但排除所有目录

    /

    当目录中的文件名带有空格(如my file.txt)时会导致问题:git bash使用反斜杠(如my\ file.txt)来转义这些空格,而git for windows不区分/\

    要排除所有目录,最好使用:

    **/

    两个连续的asterics表示目录内容。


    另外,在您的\.git\info项目目录中,有一个排除文件,它实际上与.gitignore相同(我认为)。您可以在其中添加要忽略的文件和目录。


    要忽略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

    …用你描述的.gitignore。这将给您提供git status输出,例如:

    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/

    …如果index.html文件尚未添加到存储库中。(Git看到缓存目录中有未识别的文件,但只报告目录。)要解决此问题,请确保已添加并提交index.html文件:

    1
    2
    git add *cache/index.html
    git commit -m"Adding index.html files to the cache directories"

    …你的git status会看起来像:

    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)

    (显然,您也希望提交.gitignore,我只是懒得处理这个测试用例。)


    在Unix上:

    1
    touch .gitignore

    在Windows上:

    1
    echo > .gitignore

    在终端中执行的这些命令将在当前位置创建一个.gitignore文件。

    然后只需向这个.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

    克里斯