从目录中删除所有git文件?

use*_*701 67 git

我有一个版本控制下的文件夹.我想复制它来发送,但不想包含所有.git目录及其下面的文件.

有没有办法删除所有git文件而不是手动删除所有这些文件?

Chr*_*ken 84

.git文件夹仅存储在repo的根目录中,而不是所有子目录(如subversion).您应该能够删除那个文件夹,除非您使用子模块...然后他们也会有一个.

  • 太棒了,以为它分布在像svn这样的所有子目录中! (7认同)
  • 你为什么要*删除它呢?使用`git archive`; 它是为了这个目的,或者甚至只是将除了.git目录之外的所有内容都置之不理. (7认同)
  • 你是不必要的聪明.完全有可能将供应商目录与克隆到其中的各种其他回购.Git只存储一个根`.git`,但你可以在任何地方都有repos,例如.`供应商/事/某事/ .git`. (3认同)
  • [这里](http://www.gitready.com/intermediate/2009/01/29/exporting-your-repository.html)你可以找到如何使用Jefromi提到的`git archive`的例子.还有一个链接回Stackoverflow问题[160608](http://stackoverflow.com/questions/160608/how-to-do-a-git-export-like-svn-export). (2认同)

Eri*_*ski 48

如何删除.gitLinux中文件夹下的所有目录.

运行此find命令,它将列出.git当前文件夹下的所有目录:

find . -type d -name ".git" \
&& find . -name ".gitignore" \
&& find . -name ".gitmodules"
Run Code Online (Sandbox Code Playgroud)

打印:

./.git
./.gitmodules
./foobar/.git
./footbar2/.git
./footbar2/.gitignore
Run Code Online (Sandbox Code Playgroud)

应该只有3或4个.git目录,因为git每个项目只有一个.git文件夹.你可以rm -rf yourpath手动上面的每一个.

如果你想在一个命令中删除它们并且危险地生活:

//Retrieve all the files named ".git" and pump them into 'rm -rf'
//WARNING if you don't understand why/how this command works, DO NOT run it!

( find . -type d -name ".git" \
  && find . -name ".gitignore" \
  && find . -name ".gitmodules" ) | xargs rm -rf

//WARNING, if you accidentally pipe a `.` or `/` or other wildcard
//into xargs rm -rf, then the next question you will have is: "why is
//the bash ls command not found?  Requiring an OS reinstall.
Run Code Online (Sandbox Code Playgroud)


jwe*_*ich 15

您可以使用git-archive,例如:

git archive master | bzip2 > project.tar.bz2
Run Code Online (Sandbox Code Playgroud)

master所需的分支在哪里.

  • 公平地说,`git archive`有一个缺点 - 它不导出子模块.人们需要`git submodule foreach --recursive git archive ...`.非常糟糕! (4认同)
  • @gcb:`cp -r`不处理不属于存储库的文件和目录,其中也包含被忽略的文件和目录.但是,如果您确定不需要这个并且您的处理/时间非常重要,那么请继续使用`cp`. (2认同)

小智 8

cd 然后到存储库

find . -name ".git*" -exec rm -R {} \;
Run Code Online (Sandbox Code Playgroud)

确保不要意外地将单个点,斜杠,星号或其他正则表达式通配符传输到find中,否则rm将很乐意将其删除.

  • 这很好,但我在`find: ./.git: No such file or directory` 之后收到一条通知,但它可以工作。无论如何要停止显示通知? (2认同)

Old*_*oil 6

万一其他人偶然发现了这个话题 - 这里有一个"一刀切"的解决方案.

如果您正在使用.git.svn,则可以使用--exclude-vcstar选项.这将忽略不同版本控制系统所需的许多不同文件/文件夹.

如果您想了解更多信息,请查看:http: //www.gnu.org/software/tar/manual/html_section/exclude.html