Git добавить определенные строки не в интерактивном режиме - PullRequest
0 голосов
/ 31 мая 2018

Я хочу git add только определенный диапазон строк из файла с одной командой оболочки .Я представляю что-то вроде:

git add -c myfile.go@123..204

Я не хочу использовать git add -i, git add -p или git -e (интерактивные инструменты Git), потому что мой файлбольшой и имеет много изменений, и я уже точно знаю, какие строки я хочу.Ради аргумента (понятно?), Скажем, я хочу поставить строки включительно 123-204 из файла строки 2000 myfile.go.

Я также не хочу, чтобы использовать графический интерфейсЛибо мой компьютер слишком стар для новых программ, он слишком медленный для запуска, экран слишком маленький ... что угодно.Все вышеперечисленное.Github GUI, Sourcetree , плагин (Atom|IntelliJ|VSC|.*, KDiff, Kaleidescope ... они все вышли.

Можно ли это сделать?

БонусОчки : это можно сделать для нескольких файлов одновременно?

Для справки:

Два связанных, , но не дублирующихся , вопроса.Ни то, ни другое не соответствует моим потребностям:

Документация Git, которая близка,но без сигары:

1 Ответ

0 голосов
/ 31 мая 2018

Из комментариев неясно, обеспокоены ли вы эффективностью выполнения операции добавления, вводом, который необходимо выполнить, чтобы указать инструментам, что делать, или обоими.

Я бы не сталбеспокоиться о первом;и если вы беспокоитесь об этом, вы все равно мало что можете сделать.Есть больше шагов, чем кажется разумным, и они включают обработку всего файла;но на самом деле, это не имеет значения, потому что я никогда не видел, чтобы операция размещения одного файла занимала достаточно времени, чтобы беспокоиться об этом.

Что касается количества набираемых текстов, вариантов add, которые выперечислены самые близкие встроенные предложения поддержки git.Таким образом, вы можете сделать небольшой сценарий, чтобы дополнить их.Но будет непросто убедиться, что он всегда «делает все правильно».

В частности, сложнее, чем вы могли бы представить, определить «изменения в этом диапазоне линий».Кажущаяся очевидной проблема заключается в том, что добавления и удаления строк изменяют номера строк, которые появляются после них;но вы, вероятно, можете решить эту проблему, определив диапазон номеров строк в терминах текущей рабочей версии файла (поскольку именно на это можно было бы обратить внимание в последнее время при определении диапазона номеров строк) ...

Но большая проблема заключается в обнаружении случая, когда все строки в диапазоне были отредактированы, и этот диапазон перекрывает конец диапазона строк, для которого вы вносите изменения.Например, предположим, что у вас есть файл

1
2
3
4
5

в индексе, а ваша рабочая копия говорит:

1
2
3 THREE
4 FOUR
5 FIVE

Теперь вы указываете, что хотите внести изменения из строк 2-4.

Патч будет выглядеть так:

@@ -1,5 +1,5 @@
 1
 2
-3
-4
-5
+3 THREE
+4 FOUR
+5 FIVE

И довольно ясно, что в этом случае интуитивный результат равен

1
2
3 THREE
4 FOUR
5

Но написаниекод, который делает это «правильным», не делая другие случаи «неправильными» (относительно одинаково интуитивной интерпретации), не так прост.Иногда это действительно открыто для интерпретации.«Была ли это одна операция, которая изменила три строки? Или одна операция, которая удалила три строки, за которой следовали три операции, каждая из которых добавила строку?во-первых, просматривая код в клочках изменений (а не в произвольных диапазонах строк) и заставляя вас вмешиваться вручную, если вы хотите что-то другое (например, используя режим редактирования патча);а затем, вставив маркеры конфликта (и снова требуя ручного вмешательства), когда интерпретация все еще кажется необходимой.

Таким образом, вы должны сделать упрощающие предположения для создания инструмента и убедиться, что эти предположения действительны при использованииtool.

Таким образом, идея состоит в том, чтобы создать скрипт, который считывает патч из файла, названного его первым аргументом, и редактирует патч на месте;и установите этот скрипт в качестве редактора (то есть, установив переменную окружения GIT_EDITOR) при запуске git add -e.Вы должны использовать строки вида @@ -#,# +#,# @@, чтобы выяснить номера затронутых строк для изменения, использовать эту информацию (и ваши предположения), чтобы решить, хотите ли вы сохранить или отменить данную строку изменений, и если вы хотите отказаться от нее

  • если строка начинается с -, измените - на
  • , если строка начинается с +, удалите строку
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...