J'ai un référentiel Git local. Je voudrais le rendre disponible sur un serveur distant, compatible ssh. Comment puis-je faire cela?
git
installation
Nips
la source
la source
git push origin master
échec avec l'erreur "référentiel introuvable", essayezgit update-server-info
du côté distant, où vous l'avez faitgit init --bare
git update-server-info
mais j'obtiens l'erreurfatal: Unable to look up Volumes (port 9418) (nodename nor servname provided, or not known)
Afin de configurer initialement un serveur Git, vous devez exporter un référentiel existant dans un nouveau référentiel nu - un référentiel qui ne contient pas de répertoire de travail. C'est généralement simple à faire. Afin de cloner votre référentiel pour créer un nouveau référentiel nu, vous exécutez la commande clone avec l'
--bare
option. Par convention, les répertoires du référentiel nu se terminent.git
comme suit:Cette commande prend le référentiel Git seul, sans répertoire de travail, et crée un répertoire spécialement pour lui seul.
Maintenant que vous avez une copie nue de votre référentiel, il vous suffit de la mettre sur un serveur et de configurer vos protocoles. Disons que vous avez configuré un serveur appelé
git.example.com
auquel vous avez accès SSH et que vous souhaitez stocker tous vos référentiels Git dans le/opt/git
répertoire. Vous pouvez configurer votre nouveau référentiel en copiant votre référentiel nu sur:À ce stade, les autres utilisateurs qui ont un accès SSH au même serveur qui a un accès en lecture au
/opt/git
répertoire peuvent cloner votre référentiel en exécutantSi un utilisateur SSH se connecte à un serveur et a un accès en écriture au
/opt/git/my_project.git
répertoire, il aura également automatiquement un accès push. Git ajoutera automatiquement les autorisations d'écriture de groupe à un référentiel correctement si vous exécutez la commande git init avec l'--shared
option.Il est très facile de prendre un référentiel Git, de créer une version nue et de la placer sur un serveur auquel vous et vos collaborateurs avez accès SSH. Vous êtes maintenant prêt à collaborer sur le même projet.
la source
scp
solution fonctionne mieux dans la pratique que l'OMIinit --bare
. Cela ressemble toujours à un hack laid, mais d'abord cloner localement, puis copier sur le serveur ... J'aimerais que git ait une commande pour le faire en une seule fois.--shared
fonctionné pour moi. Je me demande ce qui se passe si vous utilisezgit init --shared
sans en faire un--bare
...scp
cela à une télécommande fonctionne mieux si la télécommande ne prend pas en chargegit init --bare
(comme ce fut le cas pour moi avec git 1.5.5, 2008). Je pense que cela devrait fonctionner même si la télécommande n'a aucun git.Une note pour les personnes qui ont créé la copie locale sur Windows et qui souhaitent créer un référentiel distant correspondant sur un système de ligne Unix, où les fichiers texte obtiennent des terminaisons LF sur d'autres clones par des développeurs sur des systèmes de type Unix, mais des terminaisons 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 de traduction, donc votre ensemble 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 CRLF.
Lorsque vous poussez vers 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 les fichiers sont validés dans un référentiel, pas lorsque les référentiels sont poussés). Vous vous retrouvez avec CRLF dans votre référentiel 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 normalisant à nouveau votre référentiel Windows . Cela n'aura aucun effet visible sur votre ensemble de travail Windows, qui a toujours des terminaisons CRLF, cependant lorsque vous poussez vers la télécommande, la télécommande obtiendra LF correctement.
Je ne sais pas s'il existe un moyen facile de dire quelles fins de ligne vous avez dans votre référentiel Windows - je suppose que vous pouvez le tester en définissant core.autocrlf = false puis en clonant (si le dépôt a des fins LF, le clone aura LF aussi).
la source
Il existe une différence intéressante entre les deux solutions populaires ci-dessus:
Si vous créez le référentiel nu comme ceci:
puis
Ensuite, git configure la configuration dans 'original_repo' avec cette relation:
avec ce dernier comme télécommande en amont. Et la télécommande en amont n'a pas d'autres télécommandes dans sa configuration.
Cependant, si vous le faites dans l'autre sens:
puis 'my_remote.git' se termine avec sa configuration ayant 'origin' pointant vers 'original_repo' en tant que distant, avec un remote.origin.url équivalant au chemin du répertoire local, ce qui pourrait ne pas être approprié s'il doit être déplacé à un serveur.
Bien que cette référence «distante» soit facile à supprimer plus tard si elle n'est pas appropriée, «original_repo» doit toujours être configuré pour pointer vers «my_remote.git» en tant que télécommande en amont (ou vers où qu'elle aille) à partager). Donc, techniquement, vous pouvez arriver au même résultat avec quelques étapes supplémentaires avec l'approche # 2. Mais le n ° 1 semble une approche plus directe pour créer un «référentiel partagé central nu» provenant d'un local, approprié pour passer à un serveur, avec moins d'étapes impliquées. Je pense que cela dépend du rôle que vous voulez que le dépôt à distance joue. (Et oui, cela est en conflit avec la documentation ici .)
Attention: j'ai appris ce qui précède (au moment de la rédaction de ce document au début du mois d'août 2019) en effectuant un test sur mon système local avec un véritable référentiel, puis en effectuant une comparaison fichier par fichier entre les résultats. Mais! J'apprends toujours, donc il pourrait y avoir un moyen plus correct. Mais mes tests m'ont aidé à conclure que # 1 est ma méthode actuellement préférée.
la source
Vous pouvez créer un référentiel bare git avec le code suivant:
Une option pour avoir un référentiel git distant utilise le protocole SSH:
Pour plus d'informations, consultez la référence: Git sur le serveur - Les protocoles
la source
Vous devez créer un répertoire sur un serveur distant. Utilisez ensuite la commande "git init" pour le définir comme référentiel. Cela devrait être fait pour chaque nouveau projet que vous avez (chaque nouveau dossier)
En supposant que vous avez déjà configuré et utilisé git en utilisant les clés ssh, j'ai écrit un petit script Python qui, lorsqu'il est exécuté à partir d'un répertoire de travail, configurera une télécommande et initialisera le répertoire en tant que dépôt git. Bien sûr, vous devrez modifier le script (une seule fois) pour lui indiquer le serveur et le chemin d'accès racine pour tous les référentiels.
Vérifiez ici - https://github.com/skbobade/ocgi
la source
Normalement, vous pouvez configurer un dépôt git en utilisant simplement la
init
commandeDans votre cas, il existe déjà un repo sur une télécommande disponible. Selon la façon dont vous accédez à votre référentiel distant (avec un nom d'utilisateur dans l'URL ou une clé ssh qui gère la vérification), utilisez simplement la
clone
commande:Il existe également d'autres façons de cloner le dépôt. De cette façon, vous l'appelez si vous avez une configuration de clé ssh sur votre machine qui vérifie en tirant 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 à l'intérieur pour vous connecter à votre référentiel distant.
la source