web-dev-qa-db-fra.com

Comment créer une branche maître dans un référentiel Git nu?

(Tout est fait dans poshgit sous Windows 8):

git init --bare test-repo.git
cd test-repo.git

(Le dossier est créé avec des fichiers et des dossiers git-ish à l'intérieur)

git status

fatal: cette opération doit être exécutée dans un arbre de travail (OK, je ne peux donc pas utiliser le statut git avec un rapport nu; c'est logique, je suppose)

git branch

(Rien, il semble que le dépôt nu ne contienne aucune branche. Dois-je les ajouter à partir d'un dépôt cloné?)

cd ..
mkdir test-clone
cd test-clone
git clone ../test-repo.git

(Je reçois un avertissement concernant le clonage d'un référentiel vide)

cd test-repo

(L'invite change pour indiquer que je suis sur la branche principale)

git branch

(N'affiche aucun résultat - hein?)

git branch master

fatal: nom d'objet non valide: 'master'

Hum Alors, comment puis-je créer la branche principale dans mon dépôt nu?

38
David

Un référentiel nu est à peu près quelque chose que vous ne faites que pousser et chercher. Vous ne pouvez pas faire beaucoup "directement": vous ne pouvez pas extraire de contenu, créer des références (branches, tags), exécuter git status, etc.

Si vous souhaitez créer une nouvelle branche dans un référentiel Git nu, vous pouvez transférer une branche d'un clone vers votre référentiel nu:

# initialize your bare repo
$ git init --bare test-repo.git

# clone it and cd to the clone's root directory
$ git clone test-repo.git/ test-clone
Cloning into 'test-clone'...
warning: You appear to have cloned an empty repository.
done.
$ cd test-clone

# make an initial commit in the clone
$ touch README.md
$ git add . 
$ git commit -m "add README"
[master (root-commit) 65aab0e] add README
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md

# Push to Origin (i.e. your bare repo)
$ git Push Origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 219 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /Users/jubobs/test-repo.git/
 * [new branch]      master -> master
55
jub0bs

Une branche est juste une référence à un commit. Tant que vous n'avez rien commis dans le référentiel, vous n'avez aucune branche. Vous pouvez également le voir dans un référentiel non-nu.

$ mkdir repo
$ cd repo
$ git init
Initialized empty Git repository in /home/me/repo/.git/
$ git branch
$ touch foo
$ git add foo
$ git commit -m "new file"
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 foo
$ git branch
* master
11
chepner

Pas besoin d'un deuxième référentiel. Nous pouvons fournir un répertoire factice en utilisant --work-tree Option et des commandes telles que checkout et commit commencent à fonctionner même sur un référentiel nu. Préparez un répertoire factice:

$ rm -rf /tmp/empty_directory
$ mkdir  /tmp/empty_directory

Et voilà:

$ cd test-repo.git             # your fresh bare repository

$ git --work-tree=/tmp/empty_directory checkout --Orphan master
Switched to a new branch 'master'                  <--- abort if "master" already exists

$ git --work-tree=/tmp/empty_directory   commit --allow-empty -m "empty repo" 

$ git branch
* master

$ rmdir  /tmp/empty_directory

Testé sur Vanilla git 1.9.1. Je n'ai pas vérifié si posh-git supporte --allow-empty pour effectuer une validation sans modifier le fichier (validation uniquement par message).

6
kubanczyk

Par défaut, aucune branche n'est répertoriée et ne s'affiche qu'une fois qu'un fichier est placé. Vous n'avez pas à vous inquiéter beaucoup à ce sujet. Il suffit d’exécuter toutes vos commandes, telles que la création de structures de dossiers, l’ajout/la suppression de fichiers, la validation de fichiers, leur envoi vers le serveur ou la création de branches. Cela fonctionne parfaitement sans aucun problème.

https://git-scm.com/docs

0
Shivraaz