Может ли git автоматически переключаться между пробелами и табуляцией?
Я использую вкладки для отступов в моих программах на Python, но я бы хотел сотрудничать (используя git) с людьми, которые вместо этого используют пробелы.
Есть ли способ для git автоматически конвертировать между пробелами и табуляциями (скажем, 4 пробела = 1 табуляция) при нажатии / извлечении? (аналогично преобразованию CR/LF)
4 ответа
Вот полное решение:
В вашем репозитории добавьте файл .git/info/attributes
который содержит:
*.py filter=tabspace
Linux / Unix
Теперь запустите команды:
git config --global filter.tabspace.smudge 'unexpand --tabs=4 --first-only'
git config --global filter.tabspace.clean 'expand --tabs=4 --initial'
OS X
Сначала установите coreutils с помощью brew:
brew install coreutils
Теперь запустите команды:
git config --global filter.tabspace.smudge 'gunexpand --tabs=4 --first-only'
git config --global filter.tabspace.clean 'gexpand --tabs=4 --initial'
Все системы
Теперь вы можете проверить все файлы вашего проекта. Вы можете сделать это с:
git checkout HEAD -- **
и все файлы Python теперь будут иметь вкладки вместо пробелов.
Изменить: изменена команда принудительного оформления заказа. Конечно, сначала вы должны совершить свою работу.
Да, одно из возможных решений - использовать драйвер фильтра атрибутов git (см. Также книгу GitPro), чтобы определить механизм размазывания / очистки.
Сюда:
- каждый раз, когда вы извлекаете некоторые файлы из своего репо, пробелы могут быть преобразованы во вкладки,
- но когда вы регистрируетесь (и нажимаете и публикуете), те же самые файлы сохраняются с использованием только пробелов.
Вы можете объявить этот драйвер фильтра (названный здесь 'tabspace
') в .git/info/attributes
(для фильтра, применяемого ко всем файлам в репозитории Git), со следующим содержимым:
*.py filter=tabspace
Теперь запустите команды:
# local config for the current repo
git config filter.tabspace.smudge 'script_to_make_tabs'
git config filter.tabspace.clean 'script_to_make_spaces'
См. Ответ Olivier Verdier для конкретного рабочего примера такого грязного / чистого набора инструкций.
Очень полезная информация для всех, кто использует GitHub (или другой подобный сервис)
~/.gitconfig
[filter "tabspace"]
smudge = unexpand --tabs=4 --first-only
clean = expand --tabs=4 --initial
[filter "tabspace2"]
smudge = unexpand --tabs=2 --first-only
clean = expand --tabs=2 --initial
Тогда у меня есть два файла:attributes
*.js filter=tabspace
*.html filter=tabspace
*.css filter=tabspace
*.json filter=tabspace
а также attributes2
*.js filter=tabspace2
*.html filter=tabspace2
*.css filter=tabspace2
*.json filter=tabspace2
Работа над личными проектами
mkdir project
cd project
git init
cp ~/path/to/attributes .git/info/
Таким образом, когда вы наконец отправите свою работу на github, в представлении кода это не будет выглядеть глупо. 8 space tabs
который является поведением по умолчанию во всех браузерах.
Вклад в другие проекты
mkdir project
cd project
git init
cp ~/path/to/attributes2 .git/info/attributes
git remote add origin git@github.com:some/repo.git
git pull origin branch
Таким образом, вы можете работать с обычными вкладками на 2 space indented
проекты.
Конечно, вы можете написать аналогичное решение для преобразования из 4 space to 2 space
это тот случай, если вы хотите внести свой вклад в проекты, опубликованные мной, и вы склонны использовать 2 пробела при разработке.
Если вы работаете в Windows, у вас есть несколько дополнительных шагов, чтобы заставить работать решение @Olivier Verdier.
- Скачать CoreUtils для Windows
- После установки поместите место установки в ваш PATH ( Как добавить переменную пути)
- Я переименовал expand.exe в gexpand.exe, так как уже есть утилита расширения Windows.