J'ai besoin de créer un dépôt Git central mais je suis un peu confus ...
J'ai créé un référentiel nu (sur mon serveur git, machine 2) avec:
$ mkdir test_repo
$ git --bare init
Maintenant, je dois pousser des fichiers de mon référentiel local (machine 1) vers le référentiel nu (machine 2). J'ai accès à la machine 2 par SSH. Le fait est que je pense que je ne comprends pas le concept d'un référentiel nu ...
Quelle est la bonne façon de stocker mon code dans le référentiel nu? Comment transférer des modifications de mon référentiel local vers le référentiel nu?
Est-ce la bonne façon d'avoir un référentiel central pour avoir un référentiel nu?
Je suis un peu confus avec ce sujet. Veuillez me donner un indice à ce sujet.
--shared
optioninit
si vous envisagez de faire pousser d'autres personnes vers ce dépôt. Il ajoute automatiquement des autorisations d'écriture de groupe au référentiel - lienJ'ajoute cette réponse car après être arrivé ici (avec la même question), aucune des réponses ne décrit vraiment toutes les étapes nécessaires pour passer de rien à un référentiel distant (nu) entièrement utilisable.
Remarque: cet exemple utilise des chemins locaux pour l'emplacement du dépôt nu, mais d'autres protocoles git (comme SSH indiqué par l'OP) devraient fonctionner très bien.
J'ai essayé d'ajouter quelques notes en cours de route pour ceux qui connaissent moins git.
1. Initialisez le dépôt nu ...
Cela crée un dossier (repo.git) et le remplit avec des fichiers git représentant un dépôt git. En l'état, ce dépôt est inutile - il n'a pas de commits et, surtout, pas de succursales . Bien que vous puissiez cloner ce dépôt, vous ne pouvez pas en retirer.
Ensuite, nous devons créer un dossier de travail. Il existe plusieurs façons de procéder, selon que vous avez ou non des fichiers existants.
2a. Créez un nouveau dossier de travail (aucun fichier existant) en clonant le référentiel vide
Cette commande ne fonctionnera que si elle
/path/to/work
n'existe pas ou s'il s'agit d'un dossier vide. Prenez note de l'avertissement - à ce stade, vous n'avez toujours rien d'utile. Si vouscd /path/to/work
et courezgit status
, vous obtiendrez quelque chose comme:mais c'est un mensonge. Vous n'êtes pas vraiment sur la branche
master
(cargit branch
ne renvoie rien) et jusqu'à présent, il n'y a pas de commit.Ensuite, copiez / déplacez / créez des fichiers dans le dossier de travail, ajoutez-les à git et créez le premier commit.
Les
git config
commandes ne sont nécessaires que si vous n'avez pas déjà dit à git qui vous êtes. Notez que si vous exécutez maintenantgit branch
, vous verrez maintenant lamaster
branche répertoriée. Maintenant, lancezgit status
:C'est également trompeur - l'amont n'a pas "disparu", il n'a tout simplement pas encore été créé et
git branch --unset-upstream
n'aidera pas. Mais ça va, maintenant que nous avons notre premier commit, nous pouvons pousser et master sera créé sur le repo nu.À ce stade, nous avons un référentiel nu entièrement fonctionnel qui peut être cloné ailleurs sur une branche principale ainsi qu'une copie de travail locale qui peut tirer et pousser.
2b. Créer un dossier de travail à partir de fichiers existants Si vous avez déjà un dossier contenant des fichiers (vous ne pouvez donc pas le cloner), vous pouvez initialiser un nouveau dépôt git, ajouter un premier commit puis le lier au dépôt nu par la suite.
À ce stade, nous avons notre premier commit et une branche maître locale que nous devons transformer en une branche amont à distance.
Notez l'
-u
indicateur sur git push pour définir la (nouvelle) branche amont suivie. Tout comme auparavant, nous avons maintenant un dépôt nu entièrement fonctionnel qui peut être cloné ailleurs sur une branche principale ainsi qu'une copie de travail locale qui peut être tirée et poussée.Tout cela peut sembler évident pour certains, mais git me confond dans le meilleur des cas (ce sont des messages d'erreur et d'état qui ont vraiment besoin d'être retravaillés) - j'espère que cela aidera les autres.
la source
Répondre à vos questions une par une:
Le référentiel nu est celui qui n'a pas d'arbre de travail . Cela signifie que tout son contenu est ce que vous avez dans le
.git
répertoire.Vous pouvez uniquement mettre
commit
à nu le référentiel en ypush
accédant à partir de votre clone local. Il n'a pas d'arbre de travail, il n'a donc pas de fichiers modifiés, pas de changements.Avoir un référentiel central la seule façon c'est d'avoir un
bare
référentiel.la source
Vous pouvez également demander à git de créer un répertoire pour vous:
la source
La pratique générale consiste à disposer du référentiel central vers lequel vous effectuez une mise en dépôt nue.
Si vous avez des antécédents SVN, vous pouvez associer un dépôt SVN à un dépôt nu Git. Il ne contient pas les fichiers du dépôt sous leur forme d'origine. Alors que votre dépôt local aura en plus les fichiers qui forment votre "code".
Vous devez ajouter une télécommande au référentiel nu à partir de votre référentiel local et y pousser votre "code".
Ce sera quelque chose comme:
la source
git remote add central <url>
, dans le cas de SSH, cela inclurait-il également le chemin? par exemplegit remote add central ssh://user@server/home/user/repo.git
Cela devrait suffire:
Voir pour plus de détails " GIT: Comment mettre à jour mon référentiel nu? ".
Remarques:
origin
' pour la référence à distance du référentiel nu.git push --tags origin
pour cela.la source
Il est bon de vérifier que le code que vous avez poussé a bien été validé.
Vous pouvez obtenir un journal des modifications sur un référentiel nu en définissant explicitement le chemin à l'aide de l'option --relative.
Cela vous montrera les modifications validées comme s'il s'agissait d'un dépôt git normal.
la source
D'après les réponses de Mark Longair et Roboprog:
si version git> = 1.8
Ou :
si version git <1.8
la source
L'indicateur --bare crée un référentiel qui n'a pas de répertoire de travail. Le référentiel nu est le référentiel central et vous ne pouvez pas modifier (stocker) les codes ici pour éviter l'erreur de fusion.
Par exemple, lorsque vous ajoutez un fichier dans votre référentiel local (machine 1) et le poussez vers le référentiel nu, vous ne pouvez pas voir le fichier dans le référentiel nu car il est toujours «vide». Cependant, vous poussez vraiment quelque chose dans le référentiel et vous pouvez le voir inexplicitement en clonant un autre référentiel sur votre serveur (machine 2).
Le référentiel local de la machine 1 et le référentiel «copie» de la machine 2 sont non nus. relation entre les référentiels nus et non nus
Le blog vous aidera à le comprendre. https://www.atlassian.com/git/tutorials/setting-up-a-repository
la source
Vous pouvez exécuter les commandes suivantes pour initialiser votre référentiel local
Vous devez travailler sur votre projet à partir de votre référentiel local et utiliser le serveur comme référentiel central.
Vous pouvez également suivre cet article qui explique chaque aspect de la création et de la maintenance d'un référentiel Git. Git pour les débutants
la source