2016-09-06 2 views
-1

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

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

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

можно объединить только модифицированную строку на сервер. я столкнулся с конфликтами при слиянии с сервером

как, например, я добавил 3 строки, и я внес изменения на сервер, после того, как мой партнер по команде имел 5 строк, моя версия была перезаписана вместо их объединяют.

Я что-то не хватает?. спасибо

ответ

3

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

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

Существует ряд инструментов слияния, которые вы можете использовать, например, kdiff, diffmerge и т. Д., Которые помогут вам выбрать, какие строки добавить, чтобы вы не переписывали друг друга.

0

Я думаю, вам нужно небольшое объяснение, предположим, что команда состоит из 2 членов (A-B), и они кодируются в тот же день.

  • A совершает свои изменения, а затем толкает их в удаленный репозиторий;
  • B выполняет свои изменения, а затем толкает в удаленный репозиторий после A;

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

Тогда, B может нажать на удаленном хранилище слишком и А может тянуть новые изменения, сделанные Б.

Надежда я объяснил.

+0

Если мы кодируем в тот же день и предполагаем, что А совершает и добавляет 50 строк в код.cs и B также имеет 150 новых строк на code.cs, не будет тянуть код А в локальную запись B в существующие 150 и замените его на 50 строк? по моему опыту, после того, как я изменил код.cs с добавлением 50 строк кодов, а другой член команды с 150 строками кода вытащил мою фиксацию в онлайн-репо, его/ее 150 строк кода были перезаписаны с моей 50 строки кода – TheQuestioner

+0

Когда другой член команды с 150 строками кода вытаскивает вашу фиксацию из онлайн-репо, он должен разрешить конфликт слияния. Если он решит принять только его изменения, ваш код будет перезаписан. Но он также может принять ваши изменения, и его изменения будут перезаписаны. Или (правильный подход) он должен объединить вручную файл с помощью инструмента слияния и выбрать, какие части вашего кода и какие части его кода должны быть сохранены. Примечание: если член команды вытащит из репо с изменениями этапов, поэтому без фиксации сначала конфликт с объединением может быть разрешен автоматически и разбить некоторый код. – lubilis

1

Прежде всего, давайте придерживаться мерзавца терминологии: вы можете merge ветви и push или fetch их к/от сервера (remote).

Так что, если у Вас возникли конфликты на толкающую к remome, то вы должны fetch изменений с пульта дистанционного управления, merge их на место и push обратно в начало координат (дистанционный) коммиттер и, почти всегда, «Объединить совершить ».

Что касается Вашего вопроса в заголовке:

принудительную только измененную строку в файл

Да, можно stage и commit только один hunk (несколько строк кода), а не все файл. См. git add -p. Или, если вы предпочитаете интерфейс GUI, насколько я помню, официальный клиент для github поддерживает фиксацию с помощью hunks.

+0

В настоящее время мы находимся на одной ветке (мастер). предполагая, что в моей команде есть 3 члена, все из которых сливаются в одну и ту же ветвь (такова главная). извините, но я новичок в git repos, но неужели плохая практика иметь единую ветку для всех участников? теоретически, у всех нас есть отдельные ветви в одном репо? – TheQuestioner

+0

@ TheQuestioner "теоретически, у всех нас есть отдельные ветви в одном репо?" - на самом деле, у вас есть 4 копии основной ветки: для каждого разработчика и один в начале/удаленном. Эта ветка происхождения/удаленного упрощает одновременную работу на одном плече. Например, A и B внесли некоторые изменения в проект и отправили их в свои местные отделения. Теперь они хотят представить результаты другим разработчикам, поэтому они нажимают свои коммиты на пульт. A нажимает сначала и преуспевает, затем B толкает и получает ошибку. Теперь B должен извлекать изменения (совершает A) с пульта, объединять локально и нажимать на пульт. –

+0

@ TheQuestioner «это плохая практика иметь единственную ветвь для всех членов» - иногда одной ветви достаточно, но это может привести к ситуации, когда «плохое» совершение (что делает проект несовместимым или имеет некоторые критические ошибки) может блокировать других разработчиков, пока проблема не будет решена. Я советую вам создать ветвь для каждой задачи; Создание филиалов очень просто и может сэкономить много времени. Также стоит потратить день на чтение этой [книги] (https://git-scm.com/book/en/v2). Я считаю, что вы можете найти там множество полезных приемов, которые сэкономят ваше время в будущем. –