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

后端 未结 30 2491
离开以前
离开以前 2020-11-21 04:52

How can I add an empty directory (that contains no files) to a Git repository?

30条回答
  •  孤街浪徒
    2020-11-21 05:22

    I like the answers by @Artur79 and @mjs so I've been using a combination of both and made it a standard for our projects.

    find . -type d -empty -exec touch {}/.gitkeep \;
    

    However, only a handful of our developers work on Mac or Linux. A lot work on Windows and I could not find an equivalent simple one-liner to accomplish the same there. Some were lucky enough to have Cygwin installed for other reasons, but prescribing Cygwin just for this seemed overkill.

    Edit for a better solution

    So, since most of our developers already have Ant installed, the first thing I thought of was to put together an Ant build file to accomplish this independently of the platform. This can still be found here

    However, I later thought It would be better to make this into a small utility command, so I recreated it using Python and published it to the PyPI here. You can install it by simply running:

    pip3 install gitkeep2
    

    It will allow you to create and remove .gitkeep files recursively, and it will also allow you to add messages to them for your peers to understand why those directories are important. This last bit is bonus. I thought it would be nice if the .gitkeep files could be self-documenting.

    $ gitkeep --help
    Usage: gitkeep [OPTIONS] PATH
    
      Add a .gitkeep file to a directory in order to push them into a Git repo
      even if they're empty.
    
      Read more about why this is necessary at: https://git.wiki.kernel.org/inde
      x.php/Git_FAQ#Can_I_add_empty_directories.3F
    
    Options:
      -r, --recursive     Add or remove the .gitkeep files recursively for all
                          sub-directories in the specified path.
      -l, --let-go        Remove the .gitkeep files from the specified path.
      -e, --empty         Create empty .gitkeep files. This will ignore any
                          message provided
      -m, --message TEXT  A message to be included in the .gitkeep file, ideally
                          used to explain why it's important to push the specified
                          directory to source control even if it's empty.
      -v, --verbose       Print out everything.
      --help              Show this message and exit.
    

    I hope you find it useful.

提交回复
热议问题