Re[2]: Git: спрятанные головы?
От: . Великобритания  
Дата: 21.01.15 18:22
Оценка: 1 (1)
Здравствуйте, Bluebarry, Вы писали:

B>Я существенно продвинулся в изучении гита. Прочитал "Про Гит 2", и еще кучу статей.

B>Большое спасибо всем за ответы. Они мне реально помогли.

B>Я все-таки, прихожу к выводу, что Меркуриал мне для работы удобнее. Так что, Гитом я буду пользоваться только обмена с ГитХабом (или с другими гит-хостингами).


B>Но, вернусь, все-таки, к исходному вопросу.

B>Есть проект, над которым я работаю. У меня два компа — десктоп и лаптоп, на обоих есть клоны этого проекта. Еще один клон проекта находится на флешке.
B>Вот поработал я на десктопе, сделал несколько коммитов. А в поездку взял с собой лаптоп, и тоже сделал несколько коммитов. Все, история разветвилась, но я, возможно, об этом пока не подозреваю.
B>Теперь я хочу перенести все новые коммиты с лаптопа на флешку, причем, на на флешке, возможно уже есть коммиты, сделанные на десктопе. Какой командой это лучше всего сделать?
делаешь "git push". Оно пытается послать новые коммиты лаптопа в "центральный" флешковый репозиторий.

B>Какой командой затем перенести все новые коммиты с флешки на десктоп (на флешке, возможно, раздвоившаяся история)?

"git pull"

B>И как обнаружить это раздвоение истории на десктопе

Просто смотришь разницу истории, например "git log branchX..branchY" — показывает список коммитов, которые есть в Y, но ещё нет в X. И тут четыре комбинации:
  1. branchA..branchB — пусто, branchB..branchA — пусто => оба брача синхронизированы.
  2. branchA..branchB — не пусто, branchB..branchA — пусто => branchB новее.
  3. branchA..branchB — пусто, branchB..branchA — не пусто => branchA новее.
  4. branchA..branchB — не пусто, branchB..branchA — не пусто => diverged history, нужно явно мержить.

B> и гарантированно не потерять лаптопные коммиты?

Потерять коммиты можно только если ты специально их решишь удалить. Для этого нужно выполнить две-три хитрые команды, с хитрыми ключами. Проще сделать "rm -rf /".

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

B>С Меркуриалом все это делается просто.
B>А возможно ли это с Гитом? У меня как-то не получается...
Так, это немножко другой сценарий. Если ты не хочешь делать мержи на лаптопе, то на флешке можно завести специальный лаптопный бранч, в который ты будешь пушить только с лаптопа, поэтому конфликты возникать не должны. Т.е. на лаптопе делаешь "git push <flash_drive_repo> HEAD:laptop_branch". Потом на десктопе делаешь "git fetch <flash_drive_repo> laptop_branch && git merge FETCH_HEAD" — ну и резолвишь конфликты|етс. Между fetch и merge можешь сделать "git log HEAD..FETCH_HEAD" и "git log FETCH_HEAD..HEAD", чтобы изучить разницу истории, как я описал выше.

Интересно, как этот сценарий ты делаешь в hg?
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Отредактировано 21.01.2015 18:27 · . Предыдущая версия . Еще …
Отредактировано 21.01.2015 18:25 · . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.