Нужно GIT предложение рабочего процесса
Я изучал GIT последние пару недель, пытаясь взять под контроль код моей команды. К сожалению, код, с которым мы работаем, является проприетарным языком с некоторыми особенностями, которые мешают мне найти достаточно практичный рабочий процесс для реализации. Тем не менее, я, вероятно, не знаю всех возможностей GIT, поэтому я прошу у вас, ребята, предложения. Я разделю этот пост на три части: 1) как мои файлы; 2) рабочий процесс, который мы уже выяснили; 3) варианты я считаю на будущее.
Мои файлы тогда;
Как я уже сказал, это проприетарный язык сценариев, в котором внутри самого кода вы найдете теги, касающиеся конфигураций (серверы, БД и другие элементы). Это может звучать странно, я знаю, но технически этот кодявляется большой сложный файл конфигурации. Ну, это не может быть изменено, а пока давайте просто оставить его.
У меня также есть две разные среды:dev
а такжеprod
и я думаю, что его использование очевидно. Из-за странного подхода к коду, если сравнить сценарий вdev
к тому же вprod
вы бы увидели:
прод:
CodeCode += Code(0)
Code{1} ...
CodeConfig = "ConnectionToProducionDB"
SomeMoreGenericCode.doSomething()
(...)
И вDEV это будет выглядеть так:
CodeCode += Code(0)
Code{1} ...
CodeConfig = "GoToSomeDevDB"
SomeMoreGenericCode.doSomething()
(...)
Это было бы в отношении файлов.
Теперь, что было выяснено;
На первый взгляд мне показалось классическимдавайте ответим Ситуация и так я сделал.
[create a folder and init it]
[copy my code from production and add/commit it]
$ git checkout -b dev
[change these lines with 'CodeConfig' to the dev settings]
[go happy coding and commiting]
Через некоторое время кодирование и тесты завершены, и пришло время объединиться с производством. Вот когда начинается проблема.
Простоgit merge dev
(из моей основной ветки) слияния кодов в основном в порядке, но конфиги также будут перенесены в основную ветку, так как из PIT GIT это одно из обновлений в самом коде. Хотя в этом коротком коде это не было бы проблемой, в реальной ситуации я мог бы переконфигурировать десять или двадцать исходников, и откат по одному не всегда был приятной (и не надежной) задачей.
Конечно, когда я использую ветки, я хочу объединить свой код, чтобы сохранить историю коммитов и комментарии. Мне просто нужно сделать это более индивидуально ...
Я попробовал пару разных вещей, чтобы решить это, но безуспешно. Кажется, слияние GIT слишком умно для меня :(
Например,*.xml merge=Unset
в мой.gitattributes
файл. Или пользовательский драйвер слияния в ~ /, gitconfig, пытающийся вызвать сбой автоматического слияния (хотя я не уверен, правильно ли я это понял).
Возможные решения я думал;
Как я уже сказал, я, вероятно, не знаю всех функций GIT, поэтому мои варианты связаны с теми, кого я знаю. Я ценю ваши инновации;)
Я думаю, что самый простой способ был бы, если бы я мог отключить любое автоматическое слияние и сделать все это вручную (коды не такие большие, и мне все равно пришлось бы разбираться). После этого я бы создал простой драйвер слияния, который передавал бы все изменения кода (не только конфликты) чему-то вроде WinMerge или Kdiff3, где я выполнял свою работу. К сожалению, мне так и не удалось этого понять.
Моя последняя попытка привела к длительному и непрактичному рабочему процессу, но я напишу это здесь, чтобы вы могли понять мою цель.
Начальное репоproj1
копияprod
файлысначала добавить / зафиксировать$ git checkout -b dev
конфигурироватьdev
настройкицикл dev / code / commitскопировать файлы разработчиков вtmpDevDir
$ git checkout master
используйте WinMerge для сравненияtmpDevDir
противproj1[master branch]
и применять только желаемые изменениясовершитьproj1[master branch]
$ git merge dev
конфликты слияния, где это необходимо$ git diff HEAD HEAD^
просмотреть результат слияния и отменить объединенные конфиги$ git commit -am 'final commit for the production code'
И хорошо ... не приятно.
Есть ли у кого-нибудь идеи для более практичного рабочего процесса или других команд, которые бы помогли?
большое спасибо,
е.