我有一个受版本控制的文件夹。我想复制它来发送,但不想包含所有.git目录及其下面的文件。
有没有办法删除所有git文件而不是手动删除所有git文件?
答案 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)
答案 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文件夹。