2016-12-12 2 views
1

Я прихожу из фона git, поэтому извиняюсь за любые грубые svn-misconceptions, вызывающие этот вопрос.Концепция филиала в svn vs git

В git при переключении между branches рабочая копия всегда говорит «отрегулирована», чтобы отображать поэтапные файлы.

Так, например, при работе в branchA, который включает в себя папку с именем branchA-folder, а в ветке master еще нет этой папки, работает git checkout master (нормально, после того, как вы спрягли или зафиксировали свои изменения) сделает папку branchA-folder «dissapear» из вашей файловой системы (рабочий каталог), правильно?

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

В том случае, если речь идет о svn?

  1. Будет выше переключатель (svn switch <branchA-url>) делают branchA-folder "пропадают"?
  2. Содержит ли svn одна фактическая копия рабочей директории/ветки?

Thx.

ответ

2

Я считаю, что разница в том, что Subversion позволяет проверять столько рабочих копий, сколько вы хотите, и иметь их одновременно, потому что рабочая копия - это просто каталог с прикрепленным URL-адресом репозитория. Поэтому, когда вы переключаетесь на ветку, Subversion предполагает, что вы хотите сохранить свои локальные изменения и просто объедините входящие изменения в них (если они есть). Он также вынужден предположить, что, поскольку в настоящее время нет функции откладывания: сохранить ваши изменения на потом некуда.

Отказ от ответственности: У меня нет каких-либо GIT фон

+0

Это была действительно полезная информация для snn agnostic, как я, thx! – pkaramol

+0

Основываясь на общем обсуждении, можем ли мы сказать, что в 'svn' хорошей практикой является сохранение отдельной локальной папки для каждой ветки/тега? Переключение кажется менее плавным и более подверженным ошибкам, чем в 'git'. – pkaramol

0

Чтобы понять, как SVN сделок с вещей, которые вы должны осознать, что SVN не действительно поддержки тегов и филиалы. Branch/tag - это всего лишь копия директории trunk, размещенной в другом подкаталоге. Чтобы сделать его управляемым каким-то образом, svn реализует «дешевые» копии (но только на стороне сервера).

Будет ли вышеупомянутый переключатель (svn switch branchA-url) сделать ветку-папку «dissapear»?

Да. Он будет удален из рабочей копии (если он версируется SVN). Вы даже можете сделать svn switch ^/branchA-url/branchA-folder - нет никакой разницы между каталогом и ветвью с точки зрения SVN.

Содержит ли svn фактическую копию рабочего каталога в каждой ветке/теге?

Я не уверен, если я правильно понимаю ваш вопрос - SVN не дублировать содержимое каталога в центральном сервере, если svn copy был правильно использован для создания каталога (или филиала, или тега). Нет, если вы сделали cp и svn add от руки. Это хуже, чем git (каждый объект в базе данных git хранится ровно один раз).

+0

Да, я был не очень ясен: я не спрашиваю, поддерживает ли он несколько копий на сервере, но может ли (например,?) Создать копию _distinct_ локального экземпляра в другом месте (что НЕ случай с 'git'). Он просто регулирует рабочий каталог. В нижней строке я предполагаю, что нет никакого сопоставления 1-1 для 'svn' в' git checkout' (пропускает ли флаг '-b' для создания новой ветки или нет. – pkaramol

+0

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