Удалить все git файлы из каталога?


У меня есть папка под контролем версий. Я хочу сделать копию, чтобы отправить ее, но не хочу включать все .каталоги git и файлы под ним.

есть ли способ удалить все файлы git вместо того, чтобы вручную удалить их все?

7 56

7 ответов:

The .папка git хранится только в корневом каталоге РЕПО, а не во всех подкаталогах, таких как subversion. Вы должны быть в состоянии просто удалить эту папку, если вы используете подмодулей...тогда у них тоже будет один.

Как удалить все .git каталоги в папке в Linux.

запустите эту команду поиска, она будет перечислять все .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.

можно использовать git-архив, например:

git archive master | bzip2 > project.tar.bz2

здесь master - это нужная ветвь.

cd в репозиторий затем

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

убедитесь, что случайно не передайте одну точку, косую черту, звездочку или другой подстановочный знак regex в find, или же rm будет счастлив удалить его.

В случае, если кто-то еще наткнется на эту тему - вот вам еще "один размер подходит всем" решение.

Если вы используете .git или .svn можно использовать --exclude-vcs опция для tar. Это будет игнорировать много различных файлов / папок, необходимых для различных систем управления версиями.

Если вы хотите узнать больше об этом, проверьте: http://www.gnu.org/software/tar/manual/html_section/exclude.html

В отличие от других систем управления версиями, таких как SVN или CVS, git хранит все свои метаданные в один каталог, а не в каждом подкаталоге проекта. Так что просто удалите .git из корня (или использовать скрипт типа git-export) и вы должны быть хорошо.

ls/xargs найти 2>/dev | null /egrep/\.git$ / xargs rm-rf

эта команда (и это всего лишь одна команда) будет рекурсивно удалена .каталоги git (и файлы), которые находятся в каталоге без удаления репозитория Git верхнего уровня, что удобно, если вы хотите зафиксировать все свои файлы без управления любыми подмодулями.

найти 2 > /dev/null | egrep /\.git$ / xargs rm-rf

эта команда будет делать то же самое, но также удалить .папка git из каталога верхнего уровня.