У мене є папка під контролем версій. Я хочу зробити його копію для розсилки, але не хочу включати всі каталоги .git та файли під ним.
Чи є спосіб видалити всі git-файли замість того, щоб видаляти їх усі вручну?
У мене є папка під контролем версій. Я хочу зробити його копію для розсилки, але не хочу включати всі каталоги .git та файли під ним.
Чи є спосіб видалити всі git-файли замість того, щоб видаляти їх усі вручну?
Відповіді:
Папка .git зберігається лише в кореневому каталозі репозиторію, а не у всіх підкаталогах, таких як subversion. Ви зможете просто видалити одну папку, якщо ви не використовуєте підмодулі ... тоді у них теж буде одна.
git archive; це для цієї мети, а то й просто перепрошувати все, крім каталогу .git.
.gitignoreфайл тощо. Я думаю, ви могли б написати сценарій для цього, але може бути простіше просто використовувати git-archive, а потім вручну видалити їх із заархівованої версії.
git archiveщо згадує Єфромі. Також є посилання на запитання Stackoverflow 160608 .
.gitале ви можете мати репозиторії скрізь, наприклад. vendor/something/something/.git.
Як видалити всі .gitкаталоги з папки в Linux.
Запустіть цю команду 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.
.repoпапки (у верхній частині дерева) під час видалення всіх папок, пов’язаних з Git (якщо ви розробляєте Android). source.android.com/source/developing.html
-type dпункт із .gitоператора find, тому файли підмодулів .git також видаляються.
cd тоді до сховища
find . -name ".git*" -exec rm -R {} \;
Переконайтесь, що випадково не перенесете жодну крапку, косу риску, зірочку або інший підстановний знак регулярного виразу у пошук, інакше rmви з радістю видалите його.
find: ./.git: No such file or directoryтого, як це працює. У будь-якому випадку, щоб зупинити показ повідомлення?
Ви можете використовувати git-архів , наприклад:
git archive master | bzip2 > project.tar.bz2
Де masterзнаходиться потрібна гілка.
cp -r
cp -rне має справу з файлами та каталогами, які не є частиною сховища, що також включає ігноровані. Однак, якщо ви впевнені, що вам це не потрібно, і ваша обробка / час є критичною, звичайно, продовжуйте cp.
git archiveмає недолік - він не експортує підмодулі. Потрібно було б git submodule foreach --recursive git archive .... Вкрай погано!
На випадок, якщо хтось інший натрапить на цю тему - ось рішення, яке більше підходить для всіх.
Якщо ви використовуєте .gitабо .svn, ви можете використовувати --exclude-vcsопцію tar. Це буде ігнорувати безліч різних файлів / папок, необхідних різним системам контролю версій.
Якщо ви хочете прочитати більше про це, перегляньте: http://www.gnu.org/software/tar/manual/html_section/exclude.html
На відміну від інших систем керування джерелами, таких як SVN або CVS, git зберігає всі свої метадані в одному каталозі, а не у кожному підкаталозі проекту. Тож просто видаліть .gitз кореня (або скористайтеся таким сценарієм, як git-export ), і у вас все буде добре.
ls | xargs find 2> / dev / null | egrep /\.git$ | xargs rm -rf
Ця команда (і це лише одна команда) буде рекурсивно видаляти каталоги .git (і файли), що знаходяться в каталозі, не видаляючи репозиторій git верхнього рівня, що зручно, якщо ви хочете зафіксувати всі ваші файли без керування будь-якими підмодулями .
знайти 2> / dev / null | egrep /\.git$ | xargs rm -rf
Ця команда зробить те саме, але також видалить папку .git з каталогу верхнього рівня.