90 votes

Synchronisation du référentiel git entre ordinateurs, lors de vos déplacements?

Disons que j'ai un pc de bureau et un ordinateur portable, et parfois, je travail sur le bureau et il m'arrive de travailler sur l'ordinateur portable.

Quelle est la façon la plus facile de déplacer un dépôt git d'avant en arrière?

Je veux que les dépôts git à l'identique, afin que je puisse continuer là où j'ai laissé de l'autre ordinateur.

Je voudrais m'assurer que j'ai les mêmes branches et des tags sur les deux ordinateurs.

Merci Johan

Note: je sais comment faire avec SubVersion, mais je suis curieux de voir comment cela fonctionnerait avec git. Si c'est plus facile, je peux utiliser un pc comme serveur classique que les deux pc:s pouvez synchroniser contre.

Remarque: les Deux ordinateurs fonctionnant sous Linux.


Mise à jour:

Essayons donc XANI:l'idée que le strict repo git sur un serveur, et la poussée de la syntaxe de commande de KingCrunch. Dans cet exemple, il y a deux clients et un serveur.

Donc, nous allons créer la partie serveur en premier.

ssh user@server
mkdir -p ~/git_test/workspace
cd ~/git_test/workspace
git --bare init

Alors à partir de l'un des autres ordinateurs j'essaie d'obtenir une copie de la mise en pension avec clone:

git clone user@server:~/git_test/workspace/
Initialized empty Git repository in /home/user/git_test/repo1/workspace/.git/
warning: You appear to have cloned an empty repository.

Puis aller dans ce repo et ajouter un fichier:

cd workspace/
echo "test1" > testfile1.txt
git add testfile1.txt
git commit testfile1.txt -m "Added file testfile1.txt"
git push origin master

Maintenant que le serveur est mis à jour avec testfile1.txt.

De toute façon, nous allons voir si nous pouvons obtenir ce fichier à partir de l'autre ordinateur.

mkdir -p ~/git_test/repo2
cd ~/git_test/repo2
git clone user@server:~/git_test/workspace/
cd workspace/
git pull

Et maintenant nous pouvons voir le testfile.

À ce point, on peut l'éditer avec un peu plus de contenu et de mise à jour sur le serveur.

echo "test2" >> testfile1.txt
git add testfile1.txt
git commit -m "Test2"
git push origin master

Ensuite, nous revenons pour le premier client, et de faire un git pull pour voir le fichier mis à jour. Et maintenant, je peux faire des allers et retours entre les deux ordinateurs, et d'ajouter un troisième si j'aime.

29voto

KingCrunch Points 45168

Je pense que, il y a plusieurs approches. Je vais juste décrire, comment je gère cette

J'ai un netbook comme un serveur 24/7, qui détient plusieurs git-dépôts. À partir de/À là, je push et pull changements via SSH. Pour l'accès depuis l'extérieur j'utilise dyndns.org. Il fonctionne très bien, surtout parce que j'ai plus de deux systèmes, qui a besoin d'accéder à certaines banques.

Mise à jour: Un petit exemple. Disons que mon netbook est appelé "netbook". J'ai créer un dépôt

$ ssh username@netbook.local
$ cd ~/git
$ mkdir newThing
$ cd newThing
$ git init --bare

Sur mon bureau, je vais de créer un clone de lui. Peut-être que je vais ajouter quelques fichiers aussi

$ git clone username@netbook.local:/home/username/git/newThing
$ git add .
$ git commit -m "Initial"
$ git push origin master

Sur mon portable je vais (premier) faire de même, mais pour l'accès à distance (de l'extérieur de mon réseau local), je vais également ajouter l'adresse externe.

$ git clone username@netbook.local:/home/username/git/newThing
$ git remote add externalName username@mydyndns.home-ip.org:/home/username/git/newThing
$ git pull externalName master

C'est juste la façon git (/git flux de travail). Vous pouvez ajouter autant de dépôts distants que vous le souhaitez. Il ne marche pas de questions, si deux ou plus, se réfère à la même "physique" des référentiels. Vous n'avez pas besoin d'un local propre "serveur", vous pouvez utiliser n'importe quel serveur public, à laquelle vous avez accès en ssh. Et bien sûr, vous n'avez pas besoin un serveur public, à tous, si vous n'avez pas besoin d'accéder de l'extérieur. Le dépôt nu peut aussi être sur le système de bureau et vous pouvez ensuite créer un copier-dépôt dans le système de fichiers local.

$ mkdir myRepo; cd myRepo
$ git init --bare
$ cd /path/to/myProject
$ git remote add origin /path/to/myRepo
$ git add .; git commit -m "Initial"; git push origin master

C'est la manière, la façon dont je le supporter, et j'ai pour moi, il fonctionne très bien (si ce n'est parfait ;))

Quelque chose à lire: http://progit.org/ Vraiment un bon livre.-

7voto

XANi Points 171

Manière la plus simple: le centre des pensions de créé avec l'option --bare (donc pas vérifié les fichiers, seulement .git trucs), ou github

"Distribuée" ressemblera à cela: Programme d'installation:

  1. Sur l'ordinateur portable: git remote add bureau ssh://user@desktop/home/user/repo/path
  2. Sur le bureau: git remote add ordinateur portable ssh://user@laptop/home/user/repo/path La synchronisation:

git pull ordinateur portable/de bureau (push ne fonctionne pas très bien sur la non-nue repos parce que git de ne pas modifier les fichiers extraits lorsque l'on pousse à distance repo)

Ou, faire repo sur clé usb ;)

6voto

ndim Points 11557

Je clonerais le repo d'une boîte à l'autre, puis je mettrais en place les deux pensions pour que je puisse juste git fetch de l'autre boîte.

Renommer la télécommande de origin au nom de l'autre boîte facilite la lecture des branches distantes.

Notez qu'en utilisant simplement git fetch (et non git push ), cela fonctionne bien avec les référentiels non nus:

 [user@foo repo]$ git fetch -v bar

[user@bar repo]$ git fetch -v foo
 

1voto

seriyPS Points 2485

Pourquoi ne pas utiliser simplement rsync ?

0voto

mipadi Points 135410

Eh bien, vous pouvez pousser et tirer (via Git) vers le serveur que vous pourriez potentiellement configurer. Ou vous pouvez stocker votre dépôt sur GitHub et l'utiliser comme pont de synchronisation.

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