Comment faire un push initial vers un référentiel distant avec Git?

173

J'ai lu d'innombrables tutoriels et j'arrive toujours à court. Voici ce que j'ai:

- J'exécute RubyMine sur mon bureau Windows
- J'ai installé Git sur mon compte d'hébergement WebFaction selon leurs instructions
- Git semble fonctionner correctement sur les deux machines

Voici ce que je fais:
1. Sur le serveur:
         a. projet mkdir
         b. git init
         c. git add.
         ré. git commit <--- "rien à valider"
2. Sur le client:
         a. Créez un nouveau projet dans RubyMine.
         b. "git init" dans le répertoire supérieur du projet
         c. "Push changes" sur le serveur <---- "n'a pas réussi à pousser certaines refs vers ...".

Quelles étapes me manque-t-il?

Donald Hughes
la source

Réponses:

393

Sur le serveur:

mkdir my_project.git
cd my_project.git
git --bare init

Sur le client:

mkdir my_project
cd my_project
touch .gitignore
git init
git add .
git commit -m "Initial commit"
git remote add origin [email protected]:/path/to/my_project.git
git push origin master

Notez que lorsque vous ajoutez l'origine, vous pouvez utiliser plusieurs formats et schémas. Je vous recommande de voir ce que propose votre service d'hébergement.

Josh Lindsey
la source
La seule chose que j'ai changé, depuis que je travaille avec RubyMine, c'est que j'ai remplacé le touch .gitignore par la création d'un projet de rails avec ses 66 fichiers par défaut. Merci beaucoup!
Donald Hughes
Félicitations pour la liste des commandes. C'est ainsi que j'ai également configuré des référentiels distants.
Dave Bacher
5
Je dois ajouter que si vous souhaitez que d'autres personnes collaborent avec vous sur ce dépôt, vous devez ajouter --sharedà la fin de la git --bare initcommande. Cela configurera les autorisations nécessaires.
Josh Lindsey
Merci pour cette réponse. Il est très utile d'avoir des trucs comme ça qui remplissent les éléments manquants dans ce qui sont de très bons livres sur git, mais qui ne couvrent toujours pas beaucoup de travail de conversion à partir de CVS.
octopusgrabbus
21
J'aime courir git push --set-upstream origin masterau lieu de git push origin masterla première fois. Cela me permet de taper simplement git pushou git pullau lieu de git push origin masterchaque fois. Tout ce qui correspond à vos préférences.
Rick Smith
8

Vous pouvez essayer ceci:

sur le serveur:

ajout d'un nouveau groupe à /etc/groupaimer (exemple)

mygroup:1001:michael,nir

créez un nouveau référentiel git:

mkdir /srv/git
cd /srv/git
mkdir project_dir
cd project_dir
git --bare init (initial git repository )
chgrp -R mygroup objects/ refs/ (change owner of directory )
chmod -R g+w objects/ refs/ (give permission write)

sur le client:

mkdir my_project
cd my_project
touch .gitignore
git init
git add .
git commit -m "Initial commit"
git remote add origin [email protected]:/path/to/my_project.git
git push origin master

(Merci Josh Lindsey pour le côté client)

après le client, effectuez sur le serveur ces commandes:

cd /srv/git/project_dir
chmod -R g+w objects/ refs/

Si vous avez cette erreur après git pull:

There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details

git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream new origin/<branch>

essayer:

git push -u origin master

Ça aidera.

Michael
la source
5

Vous devez ajouter au moins un fichier au référentiel avant de valider, par exemple .gitignore.

Benjamin Wohlwend
la source
Je suppose que la façon dont j'essaie de l'utiliser est d'ajouter les fichiers initialement à partir de mon client, car c'est là que j'écris le code. Est-ce conceptuellement déplacé dans git? Dois-je d'abord m'engager sur le client, puis pousser vers le serveur?
Donald Hughes
5

Si votre projet n'a pas de branche en amont, c'est-à-dire si c'est la toute première fois que le référentiel distant va connaître la branche créée dans votre référentiel local, la commande suivante devrait fonctionner.

git push --set-upstream origin <branch-name>
Maria
la source
3

@Josh Lindsey a déjà répondu parfaitement bien. Mais je veux ajouter quelques informations car j'utilise souvent ssh.

Par conséquent, changez simplement:

git remote add origin [email protected]:/path/to/my_project.git

à:

git remote add origin ssh://[email protected]/path/to/my_project

Notez que les deux points entre le domaine et le chemin ne sont plus là.

JWo
la source
1

Vous devez configurer le référentiel distant sur votre client:

git remote add origin ssh://myserver.com/path/to/project
Dave Bacher
la source
J'ai exécuté cette commande, mais un "git push origin master" aboutit toujours à un "échec de pousser certaines refs". J'ai essayé de faire un "git pull origin master" et j'ai reçu un "could find remote ref master".
Donald Hughes
Je ne sais pas si cela fait une différence, mais mes dépôts distants sont créés avec git --bare initcomme @Josh Lindsey le recommande.
Dave Bacher
J'ai eu le même problème "échoué à pousser certaines refs" ... en essayant de pousser la branche principale d'un repo vers celui que j'ai créé ... puis j'ai remarqué que la source n'a pas de branche principale - assurez-vous que la branche que vous essayez pour pousser existe :)
Datum Geek