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

时间:2011-01-27 21:50:48

标签: git

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

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

7 个答案:

答案 0 :(得分:81)

.git文件夹只存储在repo的根目录中,而不是像subversion这样的所有子目录。你应该能够删除那个文件夹,除非你使用的是Submodules ...然后他们也会有一个。

答案 1 :(得分:46)

如何删除Linux中文件夹下的所有.git目录。

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

find . -type d -name ".git" \
&& find . -name ".gitignore" \
&& find . -name ".gitmodules"

打印:

./.git
./.gitmodules
./foobar/.git
./footbar2/.git
./footbar2/.gitignore

应该只有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.

答案 2 :(得分:15)

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

git archive master | bzip2 > project.tar.bz2

master是所需的分支。

答案 3 :(得分:8)

然后

cd到存储库

find . -name ".git*" -exec rm -R {} \;

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

答案 4 :(得分:6)

如果其他人偶然发现了这个主题 - 这里有一个“一刀切”的解决方案。

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

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

答案 5 :(得分:1)

与其他源控制系统(如SVN或CVS)不同,git将其所有元数据存储在单个目录中,而不是存储在项目的每个子目录中。所以只需从根目录中删除.git(或使用像git-export这样的脚本),你应该没问题。

答案 6 :(得分:0)

ls | xargs找到2> / dev / null | egrep /\.git$ | xargs rm -rf

这个命令(它只是一个命令)将递归删除目录中的.git目录(和文件),而不删除顶级git仓库,如果你想提交所有文件,这很方便管理任何子模块。

找到2> / dev / null | egrep /\.git$ | xargs rm -rf

此命令将执行相同的操作,但也会从顶级目录中删除.git文件夹。