Ответ 1
git status | grep typechange | awk '{print $2}' | xargs git checkout
При поиске и замене в большом репозитории я получаю кучу файлов с статусом changechange. Это в основном символические ссылки.
Вместо
git checkout -- eachfile.name
Есть ли способ reset записывать только файлы обмена?
git status | grep typechange | awk '{print $2}' | xargs git checkout
В большинстве случаев лучше удалить символические ссылки из вашего репозитория. Если вы работаете в разных операционных системах, проблема связана с ссылками в вашем репозитории.
Когда вы удалите его и установите в новое место, ваш файл будет изменен.
Некоторые клиенты Java Git имеют проблемы с символическими ссылками. Они пытаются следовать за ними, и вы получаете сообщение об ошибке. У меня была эта проблема с клиентом Jenkins.
Чтобы добавить все символические ссылки в .gitignore
, вы можете запустить следующую команду под Linux
find /your/directory -type l >> .gitignore
Вкус существующего ответа, но я предпочитаю:
git status --porcelain | awk '{if ($1=="T") print $2}' | xargs git checkout
--porcelain
предназначен для такого использования.
Обратите внимание, что этот ответ awk и существующий ответ могут быть разбиты на имена файлов, содержащие пробелы, переводы строк и т.д., И в этом случае мы можем использовать.
git status -z | perl -0 -ne 'print $1 if /^\s*T\s*(.+)$/s' | xargs -0 git checkout
git status -z
- это тот, который действительно рекомендуется для такого использования, и null завершает каждую запись. perl -0
имеет дело с тем, что -ne
обрабатывает заданную команду для каждой строки (или "запись"). $1
относится к первой группе захвата здесь, которая будет включать имя файла и нулевой ограничитель.