277 votes

Est-il possible de pousser une cachette de git pour un dépôt distant ?

Git, est-il possible de créer une cachette, pousser la planque d’un dépôt distant, récupérer la planque sur un autre ordinateur et appliquer la planque ?

Ou sont mes options :

  • Créer un patch et copier le patch à l’autre ordinateur, ou
  • Créer une branche mineure et engager le travail incomplet dans cette branche ?

88voto

sehe Points 123151

Note: j'ai juste réécrit cette réponse avec 24 heures de plus git-fu sous ma ceinture :) Dans ma coquille de l'histoire, tout le toutim est maintenant de trois one-liners. Cependant, j'ai uncondensed pour votre commodité.

De cette façon, j'espère que vous serez en mesure de voir comment j'ai fait les choses, au lieu d'avoir juste à l'aveuglette copier/coller des trucs.


Voici étape par étape.

Assumer la source est dans ~/OLDREPO contenant des caches. Créer un clone TEST ne contenant pas de caches:

cd ~/OLDREPO
git clone . /tmp/TEST

Pousser tous les caches temp branches:

git send-pack /tmp/TEST $(for sha in $(git rev-list -g stash); \
    do echo $sha:refs/heads/stash_$sha; done)

Boucle sur l'extrémité de réception de transformer de nouveau dans caches:

cd /tmp/TEST/
for a in $(git rev-list --no-walk --glob='refs/heads/stash_*'); 
do 
    git checkout $a && 
    git reset HEAD^ && 
    git stash save "$(git log --format='%s' -1 HEAD@{1})"
done

Nettoyage de votre temporaire branches si vous

git branch -D $(git branch|cut -c3-|grep ^stash_)

Faire un git stash liste et vous aurez quelque chose comme ceci:

stash@{0}: On (no branch): On testing: openmp import
stash@{1}: On (no branch): On testing: zfsrc
stash@{2}: On (no branch): WIP on sehe: 7006283 fixed wrong path to binary in debianized init script (reported as part of issue
stash@{3}: On (no branch): WIP on debian-collab: c5c8037 zfs_pool_alert should be installed by default
stash@{4}: On (no branch): WIP on xattrs: 3972694 removed braindead leftover -O0 flag
stash@{5}: On (no branch): WIP on testing: 3972694 removed braindead leftover -O0 flag
stash@{6}: On (no branch): WIP on testing: db9f77e fuse_unmount_all could be starved for the mtx lock
stash@{7}: On (no branch): WIP on xattrs: db9f77e fuse_unmount_all could be starved for the mtx lock
stash@{8}: On (no branch): WIP on testing: 28716d4 fixed implicit declaration of stat64
stash@{9}: On (no branch): WIP on emmanuel: bee6660 avoid unrelated changes

Sur l'origine du référentiel, de la même regardé comme

stash@{0}: WIP on emmanuel: bee6660 avoid unrelated changes
stash@{1}: WIP on testing: 28716d4 fixed implicit declaration of stat64
stash@{2}: WIP on xattrs: db9f77e fuse_unmount_all could be starved for the mtx lock
stash@{3}: WIP on testing: db9f77e fuse_unmount_all could be starved for the mtx lock
stash@{4}: WIP on testing: 3972694 removed braindead leftover -O0 flag
stash@{5}: WIP on xattrs: 3972694 removed braindead leftover -O0 flag
stash@{6}: WIP on debian-collab: c5c8037 zfs_pool_alert should be installed by default
stash@{7}: WIP on sehe: 7006283 fixed wrong path to binary in debianized init script (reported as part of issue #57)
stash@{8}: On testing: zfsrc
stash@{9}: On testing: openmp import

76voto

u0b34a0f6ae Points 14874

Il n’est pas possible de l’obtenir via fetch ou ainsi, la spécification du miroir est , et même si la cachette est il ne soient envoyé. Explicite `` n’a aucun effet non plus !

Il ne serait pas confondre toute façon puisque qui ne serait pas aller chercher toutes les cachettes, seulement la dernière étant ; la liste des caches est le reflog de la ref `` .

35voto

Victor Zamanian Points 1851

Je suis un peu en retard à la fête, mais je crois que j'ai trouvé quelque chose qui fonctionne pour moi à ce sujet et qu'il peut pour vous aussi, si les circonstances sont les mêmes ou similaires.

Je travaille sur un long métrage dans sa propre branche. La branche n'est pas fusionnés en maître et poussé jusqu'à son fini ou j'ai fait s'engage à ce que je me sens à l'aise en montrant au public. Donc ce que je fais lorsque je veux transférer des non-mise en scène des modifications à un autre ordinateur:

  • Faire un commit, avec un message de commit comme "[non-commit] FOR TRANSFER ONLY", mettant en vedette le contenu que vous souhaitez transférés.
  • Connecter à l'autre ordinateur.
  • Ensuite il faut faire:

    git pull ssh+git://<username>@<domain>/path/to/project/ rb:lb

    L'URL peut différer pour vous si vous accédez à votre référentiel d'une manière différente. Cela permettra d'extraire les modifications à partir de l'URL à partir de la télécommande de la branche "rb" dans la branche locale "lb". Notez que j'ai un serveur ssh sur mon propre ordinateur, et je suis capable d'accéder au dépôt de cette façon.

  • git reset HEAD^ (implique --mixed)

    Cela réinitialise le CHEF de l'état avant de l' "[non-commit]" s'engager.

À partir de git-reset(1): "--mixed: Permet de réinitialiser l'index, mais pas de l'arbre de travail (c'est à dire, les fichiers modifiés sont conservés mais pas marqué pour la validation) [...]"

Ainsi, vous aurez votre des modifications sur les fichiers à la fin, mais pas de commits sont fait pour maîtriser et pas besoin d'une cachette.

Ce sera toutefois exiger que vous git reset --hard HEAD^ dans le référentiel dans lequel vous avez effectué l' "[non-commit]", étant donné que la validation est des ordures.

31voto

Sir Robert Points 1030

C'est un peu en retard, mais cette réponse pourrait aider quelqu'un. Je voulais savoir ce que je voulais être en mesure de pousser un progrès fonction/bug/whatever et de travailler à partir du même point sur un autre ordinateur.

Ce qui fonctionne pour moi est de commettre mes en-cours de code (dans une branche que je suis en train de travailler sur le seul). Quand j'arrive à mon autre ordinateur, faire un pull, puis à l'annulation de la commettre avec:

git reset --soft HEAD^

Continuer à travailler comme à vous, avec tous vos en-cours de modifications, non validées, et unstaged.

Espérons que cela aide.

10voto

Eimantas Points 29052

J’irais avec la deuxième approche bien qu’aucune idée pourquoi vous ne peut pas commettre à maître/featured branche. Il est possible de faire la cueillette des cerises trop.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X