2010-01-06 2 views
1

J'ai un projet hébergé sur GitHub et j'aimerais travailler localement dessus. J'ai plusieurs ordinateurs qui ont besoin d'y accéder et je voudrais partager le code entre eux. Cependant, je ne veux pas que tous ces commits se passent sur GitHub, donc une simple approche de "cloner puis simplement pousser/tirer" ne convient pas.Git avec une "télécommande à deux étages"

Essentiellement, je veux ceci:

[GitHub] --> [A Local Network Share] --> [PC1] 
            --> [PC2] 

Alors PC1 et PC2 devrait être en mesure de pousser/tirer à la part du réseau local et donc partager le code entre eux, et chaque fois dans un certain temps que je veux Poussez ces changements dans mon dépôt GitHub.

Je suis un peu perdu ici - est-ce que je crée une branche? Ou est-ce que je git le clone de GitHub à mon partage puis git le clone de ma part à PC1 et PC2, ce qui leur donnerait seulement 1 remote (le partage) et le partage ayant seulement 1 remote (GitHub)? Ce n'est pas pour la sécurité - cela ne me dérange pas que toutes les validations immédiates vont à GitHub, et je ne veux pas non plus empêcher PC2 d'accéder à GitHub. C'est plus que je ne veux pas configurer tout le SSL et parce que je suis quelqu'un qui commet très très souvent (parfois toutes les quelques minutes - j'utilise git commit comme une fonction d'annulation étendue), et je veux toujours le code sur GitHub être compilable. .

Edit 2: Les solutions ici ne fonctionnent pas pour moi encore :(Donc je

git clone --bare [email protected]:foo/bar 

sur mon serveur Cela crée un clone sur mes PC, je git clone ce dépôt - que. l'étape fonctionne bien, mes PC ont un dépôt .git et mon serveur est configuré comme une télécommande

Cependant, sur le serveur, rien n'est configuré correctement - il n'y a pas de télécommandes ajoutées et je ne peux pas pousser à partir de là Ajout d'une télécommande est facile en utilisant git add, mais alors comment puis-je pousser? Git status dit qu'il nécessite un travail dir (que nous n'avons pas avec --bare), et g il pousse dit "Tout à jour" même si ce n'est pas (j'ai fait un changement sur PC1 et git poussé sur le serveur)

Création du référentiel sur le serveur sans --bare signifie qu'il a son propre travail dir, donc quand je vais pousser à partir du PC, le serveur ne le ramasse pas (je suppose que j'ai besoin d'un coup de git des PC, mais je veux éviter cela).

Ai-je raté une étape ici?

Répondre

3

La deuxième solution devrait être suffisante.

  • Création d'une fourchette signifierait votre étape intermédiaire serait encore GitHub (a fork est un git clonesur GitHub)
  • la création d'une branche ne résout rien en terme de partage Code

Si vous créez un git clone --bare myGitHubRepo.git sur votre partage, puis clonez ce partage partagé sur PC1 et PC2, vous avez configuré pour chacun de ces PC repo une destination naturelle à pousser/tirer.

Editer par mstum: Cette approche fonctionne et est correcte, mais il manque une étape. Le clone nu sur le serveur n'a aucune configuration de télécommandes.Cela doit être fait soit avec

git remote add origin [email protected]:user/Project.git 

ou chaque pression du serveur à GitHub doit être

git push [email protected]:user/Project.git 
+0

@Michael: merci pour le montage et l'étape supplémentaire. – VonC

0

Est-ce pour la sécurité afin que PC2 n'a pas accès à pousser à github? Pour cela, je configure généralement plusieurs télécommandes http://www.kernel.org/pub/software/scm/git/docs/git-remote.html'>git depuis ma machine de développement. Les développeurs qui n'ont pas accès à la télécommande principale peuvent pousser/tirer vers une télécommande séparée. Vous pouvez ensuite déplacer leurs modifications vers une branche locale différente et les fusionner comme bon vous semble.

1

Ceci est tout à fait réalisable. Tout d'abord faire un clone nu du repo github:

git clone --bare [email protected]:foo \\network\foo 

Le dépôt est nu (ne contient pas de copie de travail, est de sorte que vous pouvez cloner et pousser à localement).

ensuite sur chaque PC que vous cloner l'emplacement réseau:

git clone \\network\foo foo 

Vous travaillez ensuite sur chaque dépôt et de faire des branches, etc engage et les pousser à la part. Lorsque vous êtes prêt à pousser vers github, changez en \\network\foo et poussez à partir de là.

Questions connexes