Как удалить .orig файлы после слияния из репозитория git?
Некоторые, как файлы .orig проверяются в моем репозитории git во время слияния, которые теперь отображаются в измененном и не отслеживаемом секторе. Но я больше не хочу, чтобы эти файлы были в моем репозитории. Как это сделать.
modified: Gemfile.lock.orig
# modified: Gemfile.orig
# modified: app/assets/images/bg_required.png.orig
# modified: app/assets/javascripts/application.js.orig
etc...
Любая помощь будет оценена.
Ответы
Ответ 1
Лучшее решение в этом случае - сохранить простоту и избавиться от этих файлов независимо от git:
cd /your/repo/directory
find . -name '*.orig' -delete
Кроме того, в Windows/PowerShell вы можете выполнить следующую команду
cd \your\repo\directory
Get-ChildItem -Recurse -Filter '*.orig' | Remove-Item
Ответ 2
Попробуйте git clean
более подробную информацию вы можете найти здесь или здесь
Ответ 3
вы можете сделать:
git config --global mergetool.keepBackup false
Для получения дополнительной информации см. Git mergetool создает нежелательные файлы .orig
Ответ 4
Вы можете игнорировать файлы, используя .gitignore
Просто поместите *.orig в список, как показано здесь
https://help.github.com/articles/ignoring-files
для удаления текущих файлов вы можете создать сценарий оболочки и запустить из папки проекта, как показано ниже
for file in 'find *.orig -type f -print'
do
echo "Deleting file $file"
git rm $file -f
done
Ответ 5
К сожалению, git clean
не работает для меня, потому что я добавил *.orig
в мой глобальный файл gitignore, поэтому они также игнорируются из clean. Даже запуск git clean -x
бесполезен, потому что я не хочу, чтобы все мои игнорируемые файлы были удалены. git clean -i
полезен, но на самом деле я не хочу проверять каждый файл.
Тем не менее, мы можем использовать шаблон исключения и отменить совпадение. Предварительный просмотр с этой командой:
git clean -e '!*.orig' --dry-run
Затем, когда вы уверены, передать force
флаг действительно удалить их:
git clean -e '!*.orig' -f
Основано на комментарии leorleor
Ответ 6
git rm Gemfile.lock.orig
и остальные файлы, которые вам не нужны.
git commit --amend
Чтобы полностью удалить эти капли,
git gc --prune=0 --aggressive
Ответ 7
Для меня git clean -f
удалил все файлы *.oig. И хранит те, которые уже были там раньше.
Вот как это (почти) выглядело после слияния:
$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
(use "git push" to publish your local commits)
Untracked files:
(use "git add <file>..." to include in what will be committed)
.idea/codeStyles/
.idea/misc.xml.orig
.idea/codeStyles/
был уже там до слияния как неотслеживаемый файл. .idea/misc.xml.orig
(и многое другое) пришлось удалить.
=> Использование git clean -f
:
$ git clean -f
Removing .idea/misc.xml.orig
привело к:
$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
(use "git push" to publish your local commits)
Untracked files:
(use "git add <file>..." to include in what will be committed)
.idea/codeStyles/
Ответ 8
Вы можете записать команду из fooobar.com/questions/61610/... в ловушку перед фиксацией, поэтому этот порядок выполняется автоматически каждый раз перед выполнением фиксации:
Для этого выполните:
cd /your/repo/directory/.git/hooks
echo '#!/bin/sh' >> pre-commit | echo 'find . -name *.orig -delete' >> pre-commit
Ответ 9
вы можете просто сделать git status -s | grep "\.orig$" | awk '{print $2}' | xargs -n1 -r echo rm
git status -s | grep "\.orig$" | awk '{print $2}' | xargs -n1 -r echo rm
TL; DR;
git status -s
позволяет вам получить все измененные/отсутствующие файлы в отношении индекса
grep "\.orig$"
отфильтровывает файлы, сохраняя окончание ".orig"
awk '{print $2}'
перечисляет имя файла (пропуская информацию git, например, A, M,??)
xargs -n1 -r echo rm
печатает команды удаления для каждого аргумента (-n1: по одной за раз и -r: пропускать, когда пусто), просто скопируйте и вставьте команды, дважды проверяя файлы для удаления.
Ответ 10
git rm <file>
http://git-scm.com/docs/git-rm
Также добавьте файлы/каталоги, которые вы хотите игнорировать, в свой .gitignore файл.