Подтвердить что ты не робот

Могу ли я передать только часть своего кода с помощью SVN или Mercurial?

Я использую Tortoise SVN, но я изучал Mercurial, так как это распределенная система контроля версий.

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

Я слышал, что Git поддерживает это, пожалуйста, дайте мне знать, если это правильно.

4b9b3361

Ответ 1

Mercurial может сделать это с помощью расширения record.

Он подскажет вам каждый файл и каждый разный кусок. Например:

% hg record
diff --git a/prelim.tex b/prelim.tex
2 hunks, 4 lines changed
examine changes to 'prelim.tex'? [Ynsfdaq?]  
@@ -12,7 +12,7 @@
 \setmonofont[Scale=0.88]{Consolas}
 % missing from xunicode.sty
 \DeclareUTFcomposite[\UTFencname]{x00ED}{\'}{\i}
-\else
+\else foo
 \usepackage[pdftex]{graphicx}
 \fi

record this change to 'prelim.tex'? [Ynsfdaq?]  
@@ -1281,3 +1281,5 @@
 %% Local variables:
 %% mode: latex
 %% End:
+
+foo
\ No newline at end of file
record this change to 'prelim.tex'? [Ynsfdaq?]  n
Waiting for Emacs...

После фиксации оставшийся diff будет оставлен позади:

% hg di
diff --git a/prelim.tex b/prelim.tex
--- a/prelim.tex
+++ b/prelim.tex
@@ -1281,3 +1281,5 @@
 %% Local variables:
 %% mode: latex
 %% End:
+
+foo
\ No newline at end of file

В качестве альтернативы вам может быть проще использовать MQ (Mercurial Queues) для разделения отдельных изменений в вашем репозитории на патчи. Существует также вариант записи MQ (qrecord).

Обновление: Также попробуйте расширение crecord, которое обеспечивает интерфейс curses для выбора hunk/line.

crecord screenshot

Ответ 2

Да, git позволяет это сделать. Команда git add имеет параметр -p (или --patch), который позволяет вам просматривать ваши изменения в режиме "hunk-by-hunk", выбирать, на какой этап (вы также можете уточнить фрагменты или отредактировать исправления). Вы также можете использовать интерактивный режим для git -add (git add -i) и использовать опцию "p".

Здесь screencast при интерактивном добавлении, который также демонстрирует функцию патча git add.

Ответ 3

Отметьте TortoiseHG, который будет делать выбор hunk и позволит вам вносить разные изменения в один файл в отношении разных коммитов.

Он даже позволит вам фиксировать все изменения в некоторых файлах вместе с частичными изменениями других файлов в одном коммите.

http://tortoisehg.bitbucket.io/

Ответ 4

Недавно я спросил аналогичный вопрос, и в результате ответ на вопрос hgshelve extension было именно тем, что я искал.

Прежде чем выполнить фиксацию, вы можете поместить изменения из разных файлов (или куски изменений внутри файла) на "полку", а затем передать нужные вещи. Затем вы можете исключить изменения, которые вы не совершали, и продолжить работу.

Я использую его в последние несколько дней и очень люблю его. Очень легко визуализировать и использовать.

Ответ 5

Mercurial теперь предоставляет команду --interactive (или -i) команде commit, которая позволяет использовать эту функцию прямо из коробки.

Это работает непосредственно из командной строки, поэтому идеально, если вы энтузиаст командной строки!

Запуск

> hg commit -i

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

Это очень похоже на опции --patch и --interactive для команд git add и git commit.

Ответ 6

Я бы рекомендовал не работать так.

Если вам нужны наборы изменений, установите A, который готов к регистрации, и установите B, который еще не готов, как вы можете быть уверены, что только проверка в наборе A не нарушит ваши сборки/тесты? Вы можете пропустить некоторые строки, забыть о строках в другом файле или не понимать зависимость, которую A имеет на B, разрушающую сборку для других.

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

Большой вопрос: почему вы чувствуете необходимость работать таким образом?