在这种特殊情况下编写.git的最佳实践

在这种特殊情况下编写.git的最佳实践,git,Git,鉴于my repo中的以下冗长文件夹结构,想象所有这些文件夹都有一个子文件夹和子文件夹、子文件夹等等(仅显示前两个级别): 基本上,我只想 跟踪jim_文件夹及其所有子目录、文件 子目录和所有子目录以及所有文件 在它里面,等等等等 以及取消跟踪其他目录及其子目录及其下的每个文件或目录,即取消跟踪amy_文件夹,jerry_文件夹,tim_文件夹,以及其中的每个文件或目录 问题: 据我所知,在这种情况下,有两种编写.gitignore的方法: 忽略回购协议中的所有内容,除了jim_文件夹及其所

鉴于my repo中的以下冗长文件夹结构,想象所有这些文件夹都有一个子文件夹和子文件夹、子文件夹等等(仅显示前两个级别):

基本上,我只想

  • 跟踪jim_文件夹及其所有子目录、文件 子目录和所有子目录以及所有文件 在它里面,等等等等
  • 以及取消跟踪其他目录及其子目录及其下的每个文件或目录,即取消跟踪
    amy_文件夹
    jerry_文件夹
    tim_文件夹
    ,以及其中的每个文件或目录
问题:

据我所知,在这种情况下,有两种编写
.gitignore
的方法:

  • 忽略回购协议中的所有内容,除了
    jim_文件夹
    及其所有子目录和所有子目录等
  • 将amy_文件夹、jerry_文件夹和tim_文件夹列出来,明确忽略它们 我希望看到这两种方法的解决方案(代码)

    因为从逻辑上讲,应该采用第一种方法,但是如果
    jim_folder
    包含许多sub,sub,sub,sub,sub,sub,sub,sub,sub,sub,sub,sub,sub,sub,sub,sub,sub,sub,sub,sub,sub,sub,sub,sub

    另一方面,我不知道如何在第二种方法中编写.gitignore文件,是否还需要在.gitignore中指定要忽略的文件夹的整个结构?因为那将意味着很多很多线

    我相信在这个问题上有一个最佳做法。我想听听他们的意见

    对于#1:

    对于#2:

    jim_folder/***
    匹配jim_folder的任何子目录中的任何文件。显然,你还需要为jim_文件夹做一个例外。这让我很惊讶,但这是有道理的,因为jim_文件夹本身不是jim_文件夹或其子目录中的东西,所以它与
    jim_文件夹/***
    不匹配


    编辑:它-让我知道这是否适合您。

    您可以使用此
    。gitignore
    模式:

    /*
    !/.gitignore
    !/jerry_folder
    

    是否也要跟踪
    jim_文件夹下的
    name.txt
    文件?是。我想(递归地)跟踪
    jim_文件夹中的所有内容
    ,取消跟踪
    amy_文件夹
    jerry_文件夹
    tim_文件夹
    中的所有内容。一切都是指所有文件、子目录、子目录、子子目录……这里的
    **
    是什么意思?我使用的是git 2.1.3版
    。在实施您的解决方案#1之后,我只在未跟踪的文件中看到
    jim_folder/
    ,但是像
    jim_folder/sub_jim_folder/sub_name.txt
    jim_folder/sub_jim_folder/sub_sub_name.txt这样的东西仍然没有显示出来。尝试输入
    git add jim_folder/sub jim_folder
    -通常git不会列出没有跟踪到的目录的内容
    git状态
    。对我来说,当我添加jim_文件夹时,我也会得到它的内容。
    *
    !.gitignore
    !jim_folder
    !jim_folder/**/*
    
    amy_folder
    tim_folder
    jerry_folder
    
    /*
    !/.gitignore
    !/jerry_folder