Si vous souhaitez configurer le contrôle de code source pour un projet, mais que vous préférez ne pas l'héberger sur un service tel que GitHub, vous pouvez exécuter le vôtre git
serveur sur un VPS pour stocker votre code et agir en tant que référentiel maître pour tous les collaborateurs.
Pourquoi exécuter votre propre serveur?
Avec combien d'hébergement gratuit git
fournisseurs, tels que GitHub, GitLab, et Bitbucket, cela n’a pas beaucoup de sens de le faire vous-même. Mais, dans certaines situations, c’est une solution viable.
Tout d'abord, gérer votre propre serveur est beaucoup plus privé, surtout si vous travaillez sur du code que vous préférez ne pas stocker sur le «cloud» de quelqu'un d'autre. Cela ne veut pas dire que les fournisseurs comme GitLab ne sont pas sécurisés, mais l'hébergement de tout vous-même peut donner à certaines personnes plus de tranquillité d'esprit.
De plus, si vous utilisez un service tiers, il existe des restrictions sur la taille des fichiers qui peuvent ne pas être idéales. GitHub n'autorise pas les fichiers de plus de 100 Mo, ce qui peut être un problème majeur pour les projets avec de gros fichiers binaires. L'utilisation de votre propre serveur supprime cette limite, en supposant que vous puissiez payer plus d'espace sur le disque dur.
Quel que soit votre cas d'utilisation, vous pouvez probablement faire mieux que les barebones git
. GitLab Edition communautaire est gratuit et open source, et est facile à installer sur votre propre serveur. Cela vous donne tous les avantages de l'héberger vous-même avec une très belle interface Web et de nombreux outils CI / CD. Nous vous recommandons vivement d'utiliser GitLab si vous disposez d'un espace serveur libre. (Il nécessite environ 3 Go de RAM.) Vous pouvez lire notre guide d'installation et de configuration pour en savoir plus.
Mais, si vous ne voulez pas toutes les cloches et sifflets, et que vous voulez simplement exécuter un simple git
télécommande, vous pouvez continuer à lire.
Les télécommandes Git ne sont que le référentiel de quelqu'un d'autre
La première chose à noter sur git
est qu’héberger un serveur n’est pas vraiment compliqué. Git utilise un modèle de contrôle de source distribué; votre clone local d'un référentiel ne se connecte pas du tout à tous vos collègues, mais il se connecte à un «distant», généralement sur un serveur ou un service central externe. Lorsque vous poussez et tirez, vous apportez des modifications à la copie principale officielle de la télécommande. Lorsque vos collègues récupèrent la télécommande, ils téléchargent vos validations.
Vous pouvez techniquement exécuter git
en tant que service complètement décentralisé. Si vous aviez deux personnes, elles tiraient chacune des mises à jour l'une de l'autre. (Le transfert vers des référentiels non serveur n'est pas conseillé dans cette configuration.) Ce n'est pas vraiment utilisable dans la pratique, à moins que les deux parties aient des adresses IP statiques et soient toujours en ligne. La plupart des gens optent donc pour le modèle serveur-client.
Alors, tout ça git
Le serveur est alors juste un référentiel normal configuré comme copie principale et ouvert à Internet. C’est étonnamment simple à configurer. Tout d'abord, nous devons créer un nouvel utilisateur. Git utilise SSH pour l'authentification et tout le trafic entre les serveurs et les clients, nous aurons donc besoin d'un utilisateur de service pour gérer le dépôt.
sudo useradd git
Ensuite, passez à la git
utilisateur pour le reste de la configuration:
su git
Vous devrez ajouter vos clés SSH au git
utilisateurs authorised_keys
fichier:
nano ~ / .ssh / clés_autorisées
C'est un domaine dans lequel des services comme GitHub et GitLab ont la ligne de commande Git beat. La gestion des accès n'est pas facile à gérer de cette façon, car vous devrez donner à tout le monde accès au même utilisateur de service, ce qui n'est pas idéal, ou vous devrez configurer des utilisateurs distincts pour chaque personne, ce qui n'est pas non plus idéal. Dans tous les cas, les validations s'afficheront avec le nom d'utilisateur et l'adresse e-mail que l'utilisateur final a configurés dans son git
paramètres.
Quoi qu'il en soit, pour créer le référentiel réel, exécutez simplement git init
dans le git
répertoire personnel de l'utilisateur:
git init --bare repository.git
le --nu
l'option est nécessaire ici. Généralement, lorsque vous clonez un dépôt, git
stocke tous les fichiers qu'il utilise pour gérer les versions dans le .git
dossier, et il conserve une version utilisable de l'endroit où se trouve votre HEAD actuellement extrait. Cela rend généralement votre dossier de dépôt environ deux fois plus grand qu'il ne le serait sans git
, bien qu'il puisse être plus volumineux si vous avez de gros fichiers binaires et beaucoup de changements au fil du temps.
Un référentiel nu est simplement un référentiel sans les versions utilisables des fichiers actuellement extraits. Au lieu de cela, le dossier du référentiel est juste le contenu de ce qui serait le .git
dossier. Cela économise de l'espace de stockage et configure le référentiel en tant que serveur maître. Comme il n'y a pas de contenu local, il n'y aura pas de conflit avec la branche HEAD. Il est conventionnel de nommer les référentiels nus avec le .git
l'extension de fichier, mais ce n'est pas explicitement requis.
C’est tout ce qui est nécessaire côté serveur. À partir de votre ordinateur local, vous devrez cloner le dépôt ou ajouter une nouvelle télécommande:
git remote add origin git@example.com: repository.git
L'URL commence par git @
car il se connecte via SSH en tant que git
utilisateur. le : repository.git
à la fin se trouve en fait un nom de chemin, pas seulement un identifiant. Le chemin est relatif au git
répertoire de base de l'utilisateur, donc si vous avez placé le dépôt ailleurs, vous voudrez le déplacer ici ou utiliser le chemin complet.
Une fois que vous avez connecté votre dépôt local, vous devriez avoir un accès complet au push and pull comme d'habitude. Gardez à l'esprit cette valeur par défaut git
n'a pas de système d'autorisations intégré, donc rien n'empêche quiconque ayant accès au git
l'utilisateur d'avoir un contrôle total sur votre référentiel maître.