Comment utiliser faisceau git pour maintenir le développement synchronisé?

StackOverflow https://stackoverflow.com/questions/3635952

  •  30-09-2019
  •  | 
  •  

Question

Je dois garder mes arbres de développement synchronisés sur des ordinateurs différents, sans connexion réseau entre eux.

Nous avons un dépôt git central, et je travaille normalement sur mon propre clone sur mon ordinateur de bureau. Parfois, je dois faire un peu de développement sur un autre ordinateur, qui est jamais connecté au réseau de bureau. Aucun des ordinateurs sont jamais connecté à Internet. Le développement peut être effectué sur les deux ordinateurs entre les synchronisations.

J'ai lu les pages d'aide pour git-paquet, ce qui semble être le meilleur outil, mais je ne suis pas vraiment sûr de savoir comment un bon flux de travail pourrait être mis en place.

Pouvez-vous me donner quelques conseils ou des pointeurs?

Était-ce utile?

La solution

Bundles!

Le flux de travail avec faisceau de git va être essentiellement le même que tout autre flux de travail. Cela peut ne pas sembler conseils terriblement utile, mais la voici:. Utiliser tous les flux de travail que vous utilisez normalement, et remplacer « push / pull » avec « porter un paquet ici là sur un lecteur flash, puis tirez »

La page de l'homme a fait une assez bonne procédure pas à pas pour obtenir en venir, bien qu'il soit plus d'un exemple à sens unique. Par souci d'exhaustivité, voici une version légèrement modifiée de celle-ci, montrant comment déplacer des informations dans les deux sens:

# on hostA, the initial home of the repo
hostA$ git bundle create hostA.bundle --branches --tags

# transfer the bundle to hostB, and continue:
hostB$ git clone /path/to/hostA.bundle my-repo
# you now have a clone, complete with remote branches and tags
# just to make it a little more obvious, rename the remote:
hostB$ git remote rename origin hostA

# make some commits on hostB; time to transfer back to hostA
# use the known master branch of hostA as a basis
hostB$ git bundle create hostB.bundle ^hostA/master --branches --tags

# copy the bundle back over to hostA and continue:
hostA$ git remote add hostB /path/to/hostB.bundle
# fetch all the refs from the remote (creating remote branches like hostB/master)
hostA$ git fetch hostB
# pull from hostB's master, for example
hostA$ git pull

# make some commits on hostA; time to transfer to hostB
# again, use the known master branch as a basis
hostA$ git bundle create hostA.bundle ^hostB/master --branches --tags
# copy the bundle to hostB, **replacing** the original bundle
# update all the refs
hostB$ git fetch hostA

# and so on and so on

L'essentiel à noter est que vous pouvez ajouter un paquet comme une télécommande, et d'interagir avec elle comme vous le feriez avec une autre télécommande. Pour mettre à jour cette télécommande, laissez tomber juste un nouveau paquet, en remplaçant le précédent.

J'ai aussi pris une approche légèrement différente de choisir une base. La page de manuel utilise des balises, toujours tenus à jour avec les derniers refs qui ont été transférés à l'autre hôte. J'ai simplement utilisé les branches à distance, qui se chargera de les derniers refs transférés de l'autre hôte. Il est un peu inefficace; vous finirez plus que vous regrouper besoin, car il est un pas en arrière. Mais les lecteurs flash sont grandes, les faisceaux sont petites, et en utilisant les refs que vous avez déjà au lieu d'avoir à franchir une étape supplémentaire et faire attention sur les balises permet de gagner beaucoup d'effort.

La seule chose qui Faisceaux un peu marques de problème est que vous ne pouvez pas pousser à eux, et vous ne pouvez pas « rebasage » eux. Si vous voulez que le paquet basé sur une nouvelle base, vous devez recréer. Si vous voulez que les nouveaux commits, vous devez recréer. Cette dispute donne lieu à ma prochaine suggestion ...

Repo sur une clé USB

Honnêtement, à moins que votre pension est vraiment grand, cela pourrait être tout aussi facile. Mettez un clone nu sur une clé USB, et vous pouvez pousser à et tirer de lui des deux ordinateurs. Traitez-le comme votre connexion réseau. Nécessité de transfert à la prise en pension centrale? Branchez-!

Autres conseils

@Jefromi réponse était super -. 10x mieux que les docs git, qui vont longuement sur les exigences incompréhensibles et les actions

Il est encore un peu compliqué, voici donc le cas le plus simple une fois la synchronisation (dans mon cas: DE: un ordinateur portable hors ligne avec carte wifi cassé, TO: un ordinateur de bureau avec accès au réseau). Sur la base de @ réponse de Jefromi, cela semble fonctionner très bien:

= AHEAD machine qui est en avance par un certain nombre de commits. DERRIÈRE = machine que vous souhaitez copier le commits à

1. AHEAD: git-bundle create myBundleName.bundle --branches --tags

Les deux: copie myBundleName.bundle (par courrier électronique, USB, peu importe)

DERRIÈRE: (lieu le fichier myBundName.bundle où vous voulez en dehors le dossier du projet)

2. BEHIND: cd [the project folder]
3. BEHIND: git pull [path to the bundle file]/myBundleName.bundle master

Tant que vous incluez la branche nom sur la fin (par défaut, si vous n'êtes pas en utilisant des branches, « maître »), cela semble fonctionner très bien, et ne remplace aucune des références internes sur DERRIÈRE -. vous pouvez donc encore synch / du maître d'origine

i.e.. si DERRIÈRE a accès à Internet, il est toujours sûr de le faire:

(OPTIONAL) 4. BEHIND: git push

... et il va mettre à jour le référentiel principal, comme si vos modifications ont été faites localement, comme d'habitude, sur DERRIÈRE.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top