Navigateur Bare Bones
git instaweb --httpd=webrick
du livre Git SCM
le combiner avec quelque chose comme l'approche décrite ici pour le développement distribué (crédit à datagrok pour le concept bien décrit)
Lancez un serveur git unique à partir de n'importe quel référentiel local.
J'ai déjà tweeté cela, mais je pensais que cela pourrait utiliser une certaine extension:
Activer le flux de travail git décentralisé: git config alias.serve "démon --verbose --export-all --base-path = .git --reuseaddr --strict -paths .git /"
Supposons que vous utilisez un flux de travail git qui implique de travailler avec un référentiel «officiel» de base dans lequel vous extrayez et transférez vos modifications depuis et vers. Je suis sûr que de nombreuses entreprises le font, tout comme de nombreux utilisateurs de services d'hébergement git comme Github.
Disons que ce serveur, ou Github, tombe en panne un peu.
Pas de soucis, après tout, l'une des raisons pour lesquelles vous utilisez git est que vous avez une copie de l'historique complet du projet dans votre clone local.
Vous pouvez continuer à coder et à valider pendant que vous attendez que l'équipe des opérations redonne vie au serveur. Note à soi: acheter des beignets pour l'équipe des opérations.
Mais que se passe-t-il si, pendant ce temps d'arrêt, vous souhaitez collaborer avec une autre personne, qui peut ne pas être un expert git, sur le même référentiel?
Ou, au lieu d'un temps d'arrêt, que se passe-t-il si vous et votre collaborateur êtes sur le terrain, et pour une raison quelconque, vous ne pouvez pas obtenir votre VPN pour vous permettre de vous connecter à votre référentiel officiel?
Ou, que se passe-t-il si vous et votre collaborateur augmentez un tas de changements expérimentaux, et même si vous y avez accès, vous ne voulez pas pousser votre désordre inachevé dans le référentiel central officiel? (Pas même en tant que branches de fonctionnalité.) Peut-être êtes-vous en train de nettoyer une rebase ou une fusion désastreuse et les branches sont partout.
Eh bien, git, comme vous le savez probablement, est un système de contrôle de version "distribué" .
Même si vous pouvez utiliser un référentiel git "officiel" central dans votre flux de travail, vous avez toujours la possibilité d'utiliser git de pair à pair, où vous et votre collaborateur construisez et partagez simplement des commits les uns avec les autres, et le central serveur n'a même jamais à savoir.
Alors, comment pouvez-vous obtenir vos succursales et vous y engager, ou vice versa?
- Vous pouvez utiliser les fonctionnalités de git pour envoyer des correctifs par courrier électronique. Mais c'est un peu inélégant et nécessite quelques connaissances sur la fin de l'application des correctifs par courrier électronique.
- Vous pouvez créer un compte sur votre propre machine pour que votre collaborateur s'y connecte. Mais peut-être que vous n'avez pas d'accès root local, ou peut-être que vous ne leur faites pas confiance avec l'accès SSH à votre box.
- Vous pouvez cloner votre dépôt sur une clé USB et le passer d'avant en arrière. Mais c'est plutôt fastidieux, surtout si vous êtes sur le même réseau local et que vous avez besoin d'une clé USB.
Vous pouvez probablement penser à d'autres méthodes également. Mais il existe un moyen très simple: si vous pouvez vous voir sur le réseau, vous pouvez lancer un serveur git unique qu'ils peuvent utiliser comme télécommande pour cloner, récupérer et extraire vos modifications, et le tuer lorsque vous êtes fait avec.
L'outil qui permet cela est git daemon
, qui a beaucoup d'options et de fonctionnalités, mais dans le but d'activer cette solution unique "servir simplement le dépôt dans lequel je suis", la façon de l'utiliser est de créer un alias. J'aime l'appeler git serve
. Courir:
git config --global alias.serve "daemon --verbose --export-all --base-path=.git --reuseaddr --strict-paths .git/"
L'utilisation d'un alias est en fait cruciale, car les alias git sont exécutés dans le répertoire de base de votre arborescence de travail. Ainsi, le chemin '.git' pointera toujours au bon endroit, peu importe où vous vous trouvez dans l'arborescence de répertoires de votre référentiel.
Utilisez votre nouveau git serve
comme ceci:
- Courez
git serve
. "Prêt à gronder", rapportera-t-il. Git est méchant.
- Découvrez votre adresse IP. Disons que c'est 192.168.1.123.
- Dites "hé Jane, je ne suis pas prêt / capable de pousser ces commits jusqu'à l'origine, mais vous pouvez récupérer mes commits dans votre clone en exécutant
git fetch git://192.168.1.123/
"
- Appuyez sur ctrl + c lorsque vous ne souhaitez plus diffuser ce dépôt.
Vous pouvez également indiquer à Jane git clone git://192.168.1.123/ local-repo-name
si elle n'a pas encore de clone du référentiel. Ou, utilisez git pull git://192.168.1.123/ branchname
pour effectuer une extraction et une fusion à la fois, utile si vous travaillez ensemble sur une branche de fonctionnalité.
Notez cependant que vous ne devriez pas faire cela sur des réseaux hostiles si vous gardez des secrets dans votre référentiel, car il n'y a pas d'authentification. Il ne fait pas la publicité de son existence, mais toute personne disposant d'un analyseur de port peut le trouver, s'y connecter et cloner votre référentiel.
Mais ce n'est pas super dangereux car il est en lecture seule par défaut. Lis legit daemon
attentivement la page de manuel si vous pensez que vous souhaitez activer l'accès en écriture. Dans le cas où vous souhaitez obtenir les validations de votre collaborateur, il est beaucoup plus sûr de le laisser en lecture seule et de demander à votre collaborateur d'exécuter également cette commande, afin que vous puissiez les extraire.
Tangentiellement lié: au sujet des serveurs uniques, si vous souhaitez partager temporairement un tas de fichiers statiques via HTTP: python -m SimpleHTTPServer