2010-10-19 5 views
203

Мне нужен способ экспорта спрятанных изменений на другой компьютер.Экспорт закладок на другой компьютер

На Компьютер1 я

$ git stash save feature 

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

$ git stash show -p > patch 

Эта команда дает мне файл, который я могу перейдите на другой компьютер, на котором клонируется это репо, но вопрос заключается в том, как импортировать его как запечатывание снова.

Благодаря

ответ

206

Вы можете применить патч-файл (без фиксации изменений все же), просто запустив

git apply patchfile 

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

git stash 
+1

@Marcelo A: Приятно слышать, но, пожалуйста, отметьте ответы, которые вы приняли как таковые, нажав на большую галочку под номером номера ответа. Таким образом, ваш вопрос будет отмечен как решенный. – poke

+2

Обратите внимание на то, что система не позволит OP отмечать ответ как «принятый», пока какое-то время (как минимум, 15 минут) не истечет с момента запроса вопроса. –

+10

Прочитав этот ответ, мне было интересно, как выбрать конкретный кошелек из всех моих закладок. Ответ на это можно найти здесь: http://stackoverflow.com/a/1910142/1148702. В этом случае я закончил: «git stash show» stash @ {0} "-p> patch' вместо второй команды оболочки OP. –

10

В качестве альтернативы вы можете создать ветку со своего тайника (на компьютере 1), используя

git stash branch stashed_changes_branch 

фиксации изменений:

git commit -a 

затем добавить его в качестве пульта дистанционного управления на компьютере 2:

git remote add pc1 [email protected]:/path/to/repo 

теперь вы можете получить удаленную информацию с помощью

git fetch pc1 

теперь вы может импортировать фиксацию так, как вы хотите; используя мерзавца вишневого выбрать, мерзавец перебазироваться или что угодно ... Если вы хотите, чтобы она выглядела, как вы просто мерзавец тайник применять; вы можете использовать git cherry-pick --no-commit.


Если у вас нет прямой связи между COMPUTER1 и COMPUTER2; Вы можете использовать пульт дистанционного управления (как GitHub или что-то подобное):

git push origin stashed_changes_branch 

и COMPUTER2:

git fetch 
+1

Предполагается, что исходная система (computer1) открыта для приема внешних соединений, которые для большинства людей высаживаются здесь вряд ли будет правдой. Если вы хотите перейти по маршруту ветви, почему бы просто не надавить ветвь temp на удаленное происхождение и вытащить это из компьютера2? Вы можете удалить удаленную ветку, как только вы потянули, если вы не хотите ее поддерживать. Ветви в git настолько дешевы, что их обычно не так много. – indivisible

+0

@indivisible Я не согласен, что есть много возможностей для подключения двух компьютеров в Интернете сегодня. Методика, описанная в ответе, может быть полезной для переноса текущей работы с ноутбука на рабочий стол в локальной сети. Даже виртуальная служба vpn, такая как Hamachi, будет использоваться для передачи файлов через Интернет в любом месте прямо между компьютерами, работающими с git. – steampowered

+1

@steampowered, уверен, что это возможно для некоторых людей/ситуаций, но я подумал, что стоит упомянуть будущих читателей, потому что это трудное требование для работы этого решения и изменение вашей локальной системы env/system для приема входящего трафика принимает нетривиальные что, на мой взгляд, является «излишним» для такой задачи. Если ваша система (ы) уже открыта, обязательно используйте этот ответ - это неверно.Я просто чувствую, что большинство пользователей, приземляющихся здесь, не будут в такой ситуации. – indivisible

6

В качестве альтернативы вы можете экспортировать целые местные притоны другому compter следующим

  • git pull в вашей старой и новой директории git, чтобы обе последние были изменены.
  • копию.мерзавец папки из старого каталога мерзавца в новое хранилище
2

Другой вариант заключается в rsync.git папки с одного компьютера на другой компьютер. rsync обрабатывает только изменения файлов (быстрее, чем копия).

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

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

0

Команда запуска из оригинального поста:

git stash show -p [email protected]{x} > patch_file 

не работает для меня (по какой-то причине он создал непригодные патч-файлы). Вместо этого я должен был:

git stash apply [email protected]{x} 
git commit 

для каждого шкатулка, которую я хотел передать. Затем я поместил родительский репо в файле: /// досягаемости репо «ребенок», и сделал следующее, для каждого тайника фиксации:

git fetch file:///path_to_parent_git && git cherry-pick commit_sha 
git reset --soft HEAD^ 
git stash save my_new_stash_on_child 

Это более сложное, но сделал трюк для меня ,

Смежные вопросы