Comment créer un référentiel Git distant à partir d’un référentiel local?

J’ai un repository local Git. Je voudrais le rendre disponible sur un serveur distant, ssh-activé. Comment puis-je faire cela?

Je pense que vous faites un repository nu sur le côté distant, git init --bare , ajoutez le côté distant en tant que tracker push / pull pour votre repository local ( git remote add origin URL ), puis localement, vous dites simplement git push origin master . Désormais, tout autre référentiel peut pull du référentiel distant.

Pour configurer initialement un serveur Git, vous devez exporter un référentiel existant dans un nouveau référentiel nu – un référentiel ne contenant pas de répertoire de travail. Ceci est généralement simple à faire. Pour cloner votre référentiel afin de créer un nouveau référentiel, exécutez la commande clone avec l’option --bare . Par convention, les répertoires de référentiels dénudés se terminent par .git , comme ceci:

 $ git clone --bare my_project my_project.git Initialized empty Git repository in /opt/projects/my_project.git/ 

Cette commande prend le repository Git par lui-même, sans répertoire de travail, et crée un répertoire spécifique pour lui seul.

Maintenant que vous avez une copie vierge de votre référentiel, il vous suffit de le placer sur un serveur et de configurer vos protocoles. Disons que vous avez configuré un serveur appelé git.example.com auquel vous avez access par SSH et que vous souhaitez stocker tous vos référentiels Git sous le répertoire /opt/git . Vous pouvez configurer votre nouveau référentiel en copiant votre référentiel nu sur:

 $ scp -r my_project.git user@git.example.com:/opt/git 

À ce stade, les autres utilisateurs ayant un access SSH au même serveur ayant un access en lecture au répertoire /opt/git peuvent cloner votre référentiel en exécutant

 $ git clone user@git.example.com:/opt/git/my_project.git 

Si un utilisateur SSH se connecte à un serveur et a un access en écriture au répertoire /opt/git/my_project.git , il aura également automatiquement un access push. Si vous exécutez la commande git init avec l’option --shared Git appenda automatiquement les permissions d’écriture de groupe à un référentiel.

 $ ssh user@git.example.com $ cd /opt/git/my_project.git $ git init --bare --shared 

Il est très facile de prendre un repository Git, de créer une version à nu et de la placer sur un serveur auquel vous et vos collaborateurs pouvez accéder via SSH. Vous êtes maintenant prêt à collaborer sur le même projet.

Une note pour les personnes qui ont créé la copie locale sous Windows et veulent créer un référentiel distant correspondant sur un système Unix, où les fichiers texte obtiennent des terminaisons LF sur les clones supplémentaires des développeurs sur les systèmes Unix, mais CRLF sur Windows.

Si vous avez créé votre référentiel Windows avant de configurer la traduction de fin de ligne, vous avez un problème. Le paramètre par défaut de Git n’est pas une traduction. Votre poste de travail utilise CRLF, mais votre référentiel (c’est-à-dire les données stockées sous .git) a également enregistré les fichiers en tant que CRLF.

Lorsque vous appuyez sur la télécommande, les fichiers enregistrés sont copiés tels quels, aucune traduction de fin de ligne ne se produit. (La traduction de fin de ligne se produit lorsque des fichiers sont validés dans un référentiel, et non lorsque des référentiels sont générés). Vous vous retrouvez avec CRLF dans votre repository de type Unix, ce qui n’est pas ce que vous voulez.

Pour obtenir LF dans le référentiel distant, vous devez d’abord vous assurer que LF se trouve dans le référentiel local, en re-normalisant votre référentiel Windows . Cela n’aura aucun effet visible sur votre jeu de travail Windows, qui a toujours des terminaisons CRLF, mais lorsque vous appuyez sur à distance, la télécommande obtiendra LF correctement.

Je ne suis pas sûr qu’il existe un moyen facile de déterminer les fins de ligne dans votre référentiel Windows. Je suppose que vous pouvez le tester en définissant core.autocrlf = false puis clonage (si le repository a des terminaisons LF, le clone aura LF aussi).

Vous devez créer un répertoire sur un serveur distant. Utilisez ensuite la commande “git init” pour la définir en tant que référentiel. Cela devrait être fait pour chaque nouveau projet que vous avez (chaque nouveau dossier)

En supposant que vous ayez déjà configuré et utilisé git en utilisant des clés ssh, j’ai écrit un petit script Python, qui, exécuté à partir d’un répertoire de travail, configurera une télécommande et initialisera le répertoire en tant que repo git. Bien sûr, vous devrez éditer le script (une seule fois) pour lui indiquer le serveur et le chemin racine pour tous les référentiels.

Vérifiez ici – https://github.com/skbobade/ocgi

Un référentiel distant est généralement un référentiel nu – un référentiel Git sans répertoire de travail. Étant donné que le référentiel est uniquement utilisé en tant que sharepoint collaboration, il n’ya aucune raison de faire extraire un instantané sur le disque; c’est juste les données Git. En termes simples, un référentiel nu est le contenu du répertoire .git de votre projet et rien d’autre.

Vous pouvez créer un repository git nu avec le code suivant:

 $ git clone --bare /path/to/project project.git 

L’une des options pour avoir un référentiel git distant est d’utiliser le protocole SSH:

Un protocole de transport commun pour Git lorsque l’auto-hébergement est sur SSH. Cela est dû au fait que l’access SSH aux serveurs est déjà configuré dans la plupart des endroits – et si ce n’est pas le cas, il est facile à faire. SSH est également un protocole réseau authentifié et, comme il est omniprésent, il est généralement facile à configurer et à utiliser.

Pour cloner un repository Git sur SSH, vous pouvez spécifier une URL ssh:// comme celle-ci:

 $ git clone ssh://[user@]server/project.git 

Ou vous pouvez utiliser la syntaxe plus courte de type scp pour le protocole SSH:

 $ git clone [user@]server:project.git 

Dans les deux cas ci-dessus, si vous ne spécifiez pas le nom d’utilisateur facultatif, Git assume l’utilisateur sous lequel vous êtes actuellement connecté.

Les pros

Les avantages de l’utilisation de SSH sont nombreux. Premièrement, SSH est relativement facile à configurer: les démons SSH sont courants, de nombreux administrateurs de réseau en ont l’expérience et de nombreuses dissortingbutions de systèmes d’exploitation sont configurées avec eux ou disposent d’outils pour les gérer. Ensuite, l’access via SSH est sécurisé – tout transfert de données est crypté et authentifié. Enfin, comme les protocoles HTTPS, Git et Local, SSH est efficace, rendant les données aussi compactes que possible avant de les transférer.

Les inconvénients

L’aspect négatif de SSH est qu’il ne prend pas en charge l’access anonyme à votre référentiel Git. Si vous utilisez SSH, les utilisateurs doivent avoir un access SSH à votre machine, même en lecture seule, ce qui ne rend pas SSH propice aux projets open source pour lesquels les utilisateurs peuvent simplement vouloir cloner votre référentiel pour l’examiner. Si vous l’utilisez uniquement dans votre réseau d’entreprise, SSH peut être le seul protocole dont vous avez besoin. Si vous souhaitez autoriser un access anonyme en lecture seule à vos projets et que vous souhaitez également utiliser SSH, vous devrez configurer SSH pour que vous puissiez le transférer, mais pour que les autres puissent en extraire.

Pour plus d’informations, consultez la référence: Git sur le serveur – Les protocoles

Normalement, vous pouvez configurer un repository git en utilisant simplement la commande init

 git init 

Dans votre cas, un repo est déjà disponible sur une télécommande. Selon la manière dont vous accédez à votre repo distant (avec un nom d’utilisateur dans l’URL ou une clé ssh qui gère la vérification), utilisez uniquement la commande clone :

 git clone git@[my.url.com]:[git-repo-name].git 

Il existe également d’autres moyens de cloner le repository. De cette façon, vous l’appelez si vous avez une configuration de clé ssh sur votre machine qui vérifie si vous retirez votre référentiel. Il existe d’autres combinaisons de l’URL si vous souhaitez inclure votre mot de passe et votre nom d’utilisateur pour vous connecter à votre référentiel distant.