Git Squash с последующей push-передачей данных - PullRequest
1 голос
/ 24 ноября 2010

Я хочу перенести каталог с двоичными данными на удаленный сервер.

Поскольку это может занять несколько дней, я фиксирую локально и отправляю по одному файлу за раз (если я фиксирую все сразу и нажимаю, если передача прервана, его нужно перезапустить с начала, верно?).

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

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

Ответы [ 2 ]

1 голос
/ 24 ноября 2010

Во-первых, двоичные файлы не лучше управляются в VCS;)

Во-вторых, если вам необходимо, вы можете установить хук на удаленном репо для выполнения сквоша при получении определенного коммита (например, толчок, не содержащий ничего, кроме специального файла, подтверждающий, что все предыдущие коммиты могут быть раздавлены).
Я не уверен насчет точной реализации, но, похоже, любое решение, включающее git squash, должно было бы иметь место как локально, так и на удаленной стороне, чтобы обеспечить похожую историю.

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

0 голосов
/ 24 ноября 2010

Я не уверен, но я думаю, что git не будет передавать объекты, если они уже есть. Технически коммит не содержит ваши двоичные объекты, а только ссылку на дерево, которое содержит ссылки на объекты. Каждый объект имеет уникальный идентификатор (SHA), поэтому он должен знать, что он уже есть у них или нет. Поэтому обычно нет необходимости отправлять второй раз двоичные объекты.

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

...