Несколько одновременных изменений с использованием SVN, GIT и CVS - PullRequest
0 голосов
/ 05 мая 2010

На работе мы используем SVN, CVS и GIT, потому что есть много проектов, которые были запущены в разное время.В любом случае, общая последовательность, которая происходит, выглядит следующим образом:

  1. Работа над задачей A, внесение изменений в проект
  2. Имеет новую задачу B, некоторые ошибки или функциональные возможности должны быть сделаны в проекте, независимо от задачи A, но может влиять на тот же набор файлов
  3. Регистрация в задании B
  4. Проверка в задании A

К сожалению, в настоящее время я делаюдва поддерживают 2 рабочих копии каждого проекта.Так что я всегда могу работать над заданием B с чистого листа.Как вы можете себе представить, это расточительно и также плохо масштабируется (задачи C, D, E и т. Д.)

Для каждой из этих систем управления версиями есть команды, которые могут помочь мне выполнить следующее:

  1. «Сохранить» задачу A, вернуть рабочую копию в текущий репозиторий
  2. Работать над задачей B, проверить изменения
  3. «Восстановить», задача A вернется к рабочейкопия

Ответы [ 3 ]

2 голосов
/ 01 октября 2010

Git only

Git рекомендует использовать ветки для такого рода рабочих процессов.

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

С git вы должны сделать что-то вроде:

$ git clone ...
$ git branch
* master
$ git checkout -b taskA # Start working on task A
$ git branch
master
* taskA
$ <changes on task A>
$ git commit # This "saves" the work done on task A
$ git checkout master # Revert to the last stable state
$ git checkout -b taskB # Start working on task B
$ git branch
master
taskA
* taskB
$ <changes on task B>
$ git commit # "Save" the changes on task B
$ git checkout master # To revert to the last stable state
$ git checkout taskA # To continue working on task A

Это создаст историю, которая представляет ваши различные «рабочие пространства» с ветвями:

a -> b -> c # master
            \
              -> d -> e # Topic A
              \
                -> f -> g # Topic B <- HEAD

$ git branch
master
taskA
* taskB

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

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

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

Также вы можете проверить git stash , чтобы узнать, как сохранить временные изменения, которые не могут быть зафиксированы в данный момент.

Чтение Рабочие процессы ветвления глава из Pro Git для получения дополнительной информации.

1 голос
/ 05 мая 2010

svn и cvs не имеют простых встроенных способов сделать это без самостоятельного создания и управления файлами патчей.

git использует quilt для достижения этого (аналогично расширениям Mercurials MQ), и это весьма полезно

0 голосов
/ 05 мая 2010

На основании SVN.

Вы бы создали ответвление от ствола для Задачи А.

Затем, когда вы получите задание B, для этого вы также создадите ответвление от ствола.

Вы переключаетесь между двумя ветвями, чтобы работать над одним или другим. (Это довольно быстро, поскольку только обновляет различия)

Когда одна задача завершена, вы обновляете ее с изменениями из ствола и объединяете ее обратно в ствол.

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

...