Страницы

Поиск по вопросам

воскресенье, 15 марта 2020 г.

Как добавлять файлы в Git по их номеру в отчете `git status`?

#git #git_add #git_status


Я часто сталкиваюсь со следующей ситуацией:

modified:   assembly/main.debug.s
modified:   ../src/cd/Config.java
modified:   ../src/cd/memoization/cfg/SubgraphFinder.java
modified:   ../src/cd/memoization/cfg/SubgraphMap.java
modified:   ../src/cd/profiler/Profile.java
modified:   ../test/cd/test/TestSamplePrograms.java
modified:   ../../notes/20150521.txt


Файлов очень много и у них сложные пути. Их неудобно добавлять из консоли, приходится
вручную прописывать сложный путь. Я хотел бы добавлять их по номерам:

git magic-status

1 modified:   assembly/main.debug.s
2 modified:   ../src/cd/Config.java
3 modified:   ../src/cd/memoization/cfg/SubgraphFinder.java
4 modified:   ../src/cd/memoization/cfg/SubgraphMap.java
5 modified:   ../src/cd/profiler/Profile.java
6 modified:   ../test/cd/test/TestSamplePrograms.java
7 modified:   ../../notes/20150521.txt

git magic-commit 2,3,5 -m "Простой и удобный способ"


Как можно это сделать?


Для пометки связанных вопросов на разных языках: https://stackoverflow.com/questions/30411901/how-to-add-specific-files-in-git-by-their-number-in-git-status

Это перевод собственного ответа с EN.SO
    


Ответы

Ответ 1



Демонстрационный репозиторий: Для примеров я использую репозиторий с четырьмя файлами: a, b, c, d. Из них a - отслеживается, изменен, добавлен (tracked, changed and staged); b отслеживается, изменен, но не добавлен (tracked, changed and not staged); c не отслеживается, но добавлен; d просто ещё не отслеживается. 1. Отдельная утилита: git-number При запуске без аргументов, git number выполняет обычный git status, добавляя уникальный номер каждой выводимой строке с именем файла. Он "запоминает" соответствие номера файлу. При запуске с аргументами: $ git number <любая команда git> [одно или несколько чисел, и/или --аргументов] git number запускает эту <любую команду>, заменяя все числа соответствующими именами файлов. Нечисловые аргументы передаются в git без изменений. Пример с командой diff : 2. Отдельная утилита: SCM Breeze SCM Breeze - это набор shell-скриптов для bash и zsh. Он дает новые возможности работы с Git. Он интегрируется в вашу командную оболочку и добавляет упоминание файла по номеру, индекс репозитория с автодополнением по Tab и многие другие функции. SCM Breeze использует горячие клавиши и псевдонимы (aliases) команд: Ctrl + x, c => git_add_and_commit - добавить выбранные файлы и сделать коммит всех добавленных изменений. Ctrl + x, Space => git_commit_all - сделать коммит всех имеющихся изменений. git add: $ ga 1 git diff: $ gd 2 git reset: $ grs 3 git commit: $ gco 4 3. "Родными" средствами: git add -i git add -i Из Git reference: -i --interactive Добавить содержимое рабочей папки в индекс в интерактивном режиме... Этот режим можно запомнить как -iнтуитивный, поскольку он невероятно понятен и удобен (по крайней мере, для бывалого пользователя Vim). Если не можете выйти из режима добавления, нажмите Return с пустой строкой. Входим в интерактивный режим: Добавляем измененный отслеживаемый файл: Добавляем неотслеживаемый файл: Смотрим на результат: Если вам интересно, что это за консоль/цвета/оформление: iTerm2 + zsh + oh-my-zsh

Комментариев нет:

Отправить комментарий