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

时间:2014-12-04 00:41:50

标签: git

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

jim_folder >
       name.txt
       sub_jim_folder >
                  sub_name.txt 
                  sub_sub_jim_folder >
                          sub_sub_name.txt
                          .....

tim_folder >
       name.txt
       sub_tim_folder >
                  sub_name.txt
                  sub_sub_tim_folder >
                       sub_sub_name.txt
                       ......

amy_folder >
       name.txt
       sub_amy_folder >
                  sub_name.txt
                  sub_sub_amy_folder >
                       sub_sub_name.txt
                       .......
jerry_folder > 
       name.txt
       ........

基本上,我只想

  • 跟踪jim_folder及其所有子目录,其中的文件 子目录和所有子子目录以及所有文件 在其中,依此类推。
  • 并解开其他目录及其子目录及其下的每个文件或目录,即未跟踪amy_folderjerry_foldertim_folder以及其中的每个文件或目录。

问题:

根据我的理解,在这种情况下有两种方法可以写.gitignore

  1. 忽略repo中除jim_folder及其所有子目录及其所有子子目录之外的所有内容,依此类推。
  2. 通过列出来明确忽略amy_folderjerry_foldertim_folder
  3. 我希望看到两种方法的解决方案(代码)

    因为从逻辑上讲,应采用第一种方法,但如果jim_folder包含许多子,子,子子,......,似乎我会写很多行。 .directories。

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

    我相信这个问题有最好的做法。我想听听他们的消息。

2 个答案:

答案 0 :(得分:2)

对于#1:

*
!.gitignore
!jim_folder
!jim_folder/**/*

对于#2:

amy_folder
tim_folder
jerry_folder

jim_folder/**/*匹配jim_folder的任何子目录中的任何文件。你还需要为jim_folder做一个例外。这让我很吃惊,但这很有意义,因为jim_folder本身并不是jim_folder或其子目录中的东西,所以它不匹配jim_folder/**/*

编辑:depends on git version - 让我知道这是否适合您。

答案 1 :(得分:1)

您可以使用此.gitignore模式执行此操作:

/*
!/.gitignore
!/jerry_folder