как синхронизировать две отдельные рабочие директории - или git способен распознавать идентичные коммиты? - PullRequest
0 голосов
/ 13 ноября 2018
  1. (в каком-то рабочем каталоге A) я сделал некоторые локальные изменения и выполнил add и commit
  2. (в каком-то рабочем каталоге B) Я получил патч для этих локальных изменений (в каталоге A) и применил его в каталоге B. Я выполнил add / commit / push в каталоге B.
  3. (в рабочем каталоге A) Я выполнил git pull и ожидал, что мой локальный коммит исчезнет. Это не так.
  4. (в рабочем каталоге A) Я выполнил git reset HEAD ~. git diff показывает изменения, которые уже были переданы ранее. ( забудьте об этом пункте - это была моя попытка решить эту проблему)

Очевидно, я сделал что-то не так. что это?

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Существует множество способов посмотреть, как вы можете координировать содержимое между рабочими каталогами двух машин.

Самое основное: если вы зафиксировали изменения на машине A и хотите получить их на машине B, вы можете извлечь их из A в B, чтобы у A и B был патч через один и тот же коммит..Иногда это не подходящий ответ, и поэтому возможны другие способы.Но то, что имеет смысл для того, что вы делаете, зависит от того, что вы делаете, и мы еще не знаем достаточно, чтобы обязательно решить эту проблему.

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

(в рабочем каталоге A) Я выполнил git pull и ожидал, что мой локальный коммит исчезнет.Это не так.

Мой вопрос: почему это ожидаемое поведение?В общем, вы не хотите, чтобы ваши локальные изменения исчезали при удалении изменений;вместо этого вы хотите объединить их.

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

git pull --rebase

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

Возможно, вы ожидали такого поведения, потому что в прошлом вы использовали репозитории, настроенные для перебазирования по запросу по умолчанию?Имейте в виду, что автоматическая перебазировка задокументирована как «потенциально опасная» функция, поэтому вы можете подумать, действительно ли она является лучшей по умолчанию;но если это значение по умолчанию, ищите pull.rebase в документации по git config: https://git -scm.com / docs / git-config

0 голосов
/ 15 ноября 2018

Вы можете сделать это с помощью git pull, но я бы использовал rsync

cd directory_A; rsync -mauvPAX directory_B/ .

Это эффективно дублирует содержимое directory_B в directory_A и сохранит все файлы в directory_A, которые отсутствуют в directory_B.

Если вы хотите очистить любые дополнительные файлы из directory_A, которых нет в directory_B, то включите флаг --delete.

0 голосов
/ 13 ноября 2018

Я думаю, что вы описали это: На машине 1 сделать коммит Х На машине 2 примените патч, который делает то же самое, и создайте коммит X ' Push commit X '

На машине 1 pull commit X ' Машина 1 теперь имеет 2 коммита: X и X '

Вы сбрасываете HEAD ~ на машине 1, удаляете коммит X 'и оставляете коммит X.

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

Тем не менее, может быть интересно снова сделать тягу и запустить мерзавец ГОЛОВА чтобы увидеть, что было совершено. Возможно, это слияние с очень небольшим содержанием? Кто-то с большим знанием сантехники мог бы ответить лучше, чем я. Скорее всего, это зависит от того, какие параметры вы объединяете Слить, перебазировать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...