How to track directories but not their files with Git?

前端 未结 5 2053
礼貌的吻别
礼貌的吻别 2020-12-02 10:22

I\'ve recently started using Git and am having trouble with just one thing. How can I track directories without tracking their contents?

For example the site I\'m wo

相关标签:
5条回答
  • 2020-12-02 10:47

    Git doesn't track directories, it tracks files, so to acheive this you need to track at least one file. So assuming your .gitignore file looks something like this:

    upload/*
    

    You can do this:

    $ touch upload/.placeholder
    $ git add -f upload/.placeholder
    

    If you forget the -f you'll see:

    $ git add upload/.placeholder
    The following paths are ignored by one of your .gitignore files:
    upload
    Use -f if you really want to add them.
    fatal: no files added
    

    Then when you do git status you'll see:

    # On branch master
    #
    # Initial commit
    #
    # Changes to be committed:
    #   (use "git rm --cached ..." to unstage)
    #
    #   new file:   upload/.placeholder
    #
    

    Obviously you can then do:

    $ touch upload/images/.placeholder
    $ git add -f upload/images/.placeholder
    
    0 讨论(0)
  • 2020-12-02 10:50

    I wrote about this here.

    Add a .gitignore within the directory.

    0 讨论(0)
  • 2020-12-02 10:58

    Best answerd I've found is to include a .gitignore file in your upload folder with this content

    # Ignore everything in this directory
    *
    # Except this file
    !.gitignore
    

    Here you have How can I add an empty directory to a Git repository?

    0 讨论(0)
  • 2020-12-02 10:58

    In order to track only directories but not the files, I did the following. Thanks to the @PeterFarmer's comment on git tracking only files, I've been able to keep all directories excluding the files as described in below.

    # exclude everything in every folder
    /data/**/*.*
    
    # include only .gitkeep files
    !/data/**/*.gitkeep
    

    Adding this to the .gitignore file will do the work. The following is my folder structure.

    data/
    ├── processed
    │   ├── dataset1.csv
    │   └── dataset2.csv
    ├── raw
    │   ├── raw_dataset1.json
    └── test
        ├── subfolder
        │   └── dataset2.csv
        └── reviews.csv
    

    When I do git add . && git status, git only recognizes folders, but not files.

    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            modified:   .gitignore
            new file:   data/processed/.gitkeep
            new file:   data/raw/.gitkeep
            new file:   data/test/.gitkeep
            new file:   data/test/subfolder/.gitkeep
    

    Keep in mind that the following for your .gitignore files:

    Prepending slash looks only for the root directory.

    /dir

    Double asterisk looks for zero or more directories.

    /**/

    0 讨论(0)
  • 2020-12-02 11:04

    The best solution so far:

    1) Create a .gitignore file

    2) Write inside:

    *
    */
    !.gitignore
    

    3) Add the .gitignore file to the folder that you want.

    Source: https://stackoverflow.com/a/5581995/2958543

    0 讨论(0)
提交回复
热议问题