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

182

J'ai un serveur privé exécutant git 1.7 Quand je

git init 

un dossier, il ne crée pas de branche principale. Parce que quand je fais:

git branch 

il ne liste rien. Quand je fais:

git --bare init

il crée les fichiers. Quand je tape

git branch master 

ça dit:

fatal: Not a valid object name: 'master'.
Roy van Zanten
la source
Le même résultat en essayant de générer une nouvelle branche:git branch newbranch
Sören

Réponses:

281

Quand j'ai git initun dossier, il ne crée pas de branche principale

C'est un comportement vrai et attendu. Git ne créera pas de masterbranche tant que vous n'aurez pas validé quelque chose.

Quand je le fais, git --bare initcela crée les fichiers.

Un non-bare git initcréera également les mêmes fichiers, dans un .gitrépertoire caché à la racine de votre projet.

Quand je tape, git branch masteril dit "fatal: pas un nom d'objet valide: 'master'"

C'est encore un comportement correct. Jusqu'à ce que tu t'engages, il n'y a pas de maître branche principale.

Vous n'avez pas posé de question, mais je vais répondre à la question que je supposais que vous vouliez poser. Ajoutez un ou plusieurs fichiers à votre répertoire et git addles préparez pour une validation. Ensuite, git commitpour créer votre commit initial et votre masterbranche.

meagar
la source
3
Alors, que faire si je ne voulais jamais du tout un pointeur de branche appelé "maître"? Et si je voulais qu'on l'appelle "main"? Il n'y a aucun moyen de commencer avec un nom différent pour le premier pointeur de branche? Pas de paramètres "git init"? Est-ce que je pourrais peut-être changer le nom indiqué dans .git / HEAD? Y a-t-il d'autres fichiers que j'aurais besoin de modifier également?
Jemenake
1
@Jemenake Puis lancez votre dépôt, faites un commit et renommez la branche. Si vous voulez vraiment éviter qu'une branche "maître" ne soit jamais créée, éditez .git/HEADet changez refs/heads/masteren refs/heads/main, mais il n'y a aucune raison de le faire. Renommez simplement votre branche après le premier commit.
meagar
13
vous pouvez utiliser git checkout -b <branchname>pour changer HEAD - vous n'avez pas besoin de modifier le fichier.
Superfly Jon
1
La dernière partie était en or, TFS GIT est livré avec un repo git totalement non initialisé. Donc, après le premier clonage en utilisant SourceTree, rien ne fonctionne, je n'ai pas pu le comprendre pendant longtemps jusqu'à ce que "Puis git commit pour créer votre commit initial et votre branche principale". N'y a-t-il vraiment aucun moyen d'avoir master-local / remote sans commit / push initial?
Pawel Cioch
La dernière explication m'aide à comprendre que la branche ne peut pas exister s'il n'y a pas de commits.
Mayur Patil
23

Git crée une branche principale une fois que vous avez effectué votre premier commit. Il n'y a rien pour quoi avoir une branche s'il n'y a pas de code dans le référentiel.

user489998
la source
1
Mais vous avez besoin d'une nouvelle branche pour passer à master.
Sören
1
voici une question concernant 'Git crée une branche maître une fois que vous avez effectué votre premier commit.' Alors pourquoi le 'git status' affiche-t-il 'On Branch Master' avant tout cela?
Tique 20
16

Tout d'abord, lorsque vous créez un "référentiel nu", vous n'allez pas travailler avec lui (il ne contient pas de copie de travail, donc le git branch commande n'est pas utile).

Maintenant, la raison pour laquelle vous n'auriez pas de masterbranche même après avoir fait un git initest qu'il n'y a pas de commits: lorsque vous créez votre premier commit, vous aurez alors une masterbranche.

Boréalide
la source
1
D'accord, c'est clair. Mais quand je commets, il dit: fatal: ident vide
Roy van Zanten
J'ai fixé ça à. Mais quand je veux extraire / récupérer ce dépôt à partir d'un autre ordinateur. Dois-je faire git init là-bas?
Roy van Zanten
@RoyvanZanten Vous pouvez utiliser git clonepour éviter d'avoir à faire un git initcôté récepteur.
Borealid
J'ai réussi à tout faire fonctionner. Aucune erreur. Mais quand j'essaye de pousser, il dit: Ecrire des objets <bla> bla> Total <3/3> Au SERVEUR 59fa0tweirdcod04 master> master Mais quand je vérifie les fichiers sur le serveur, rien n'est là.
Roy van Zanten
@RoyvanZanten Regardez-vous le référentiel du serveur ou la copie de travail du serveur ? Vous devez faire un git checkoutsi vous voulez que le WC reflète ce qui se trouve dans le .gitrépertoire (où vous avez poussé).
Borealid
12

Vous devez vous engager au moins une fois sur master avant de créer une nouvelle branche.

Fundhor
la source