¿Cómo hago un envío inicial a un repositorio remoto con Git?

173

He leído innumerables tutoriales y me quedo corto. Esto es lo que tengo:

- Estoy ejecutando RubyMine en mi escritorio de Windows
- He instalado Git en mi cuenta de alojamiento WebFaction según sus instrucciones
- Parece que Git funciona bien en ambas máquinas

Esto es lo que estoy haciendo:
1. En el servidor:
         a. proyecto mkdir
         b. git init
         c. git add.
         re. git commit <--- "nada que confirmar"
2. En el cliente:
         a. Crear nuevo proyecto en RubyMine.
         si. "git init" en el directorio superior del proyecto
         c. "Empujar cambios" al servidor <---- "no se pudieron enviar algunas referencias a ...".

¿Qué pasos me estoy perdiendo?

Donald Hughes
fuente

Respuestas:

393

En el servidor:

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

En el cliente:

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

Tenga en cuenta que cuando agrega el origen, hay varios formatos y esquemas que puede usar. Le recomiendo que vea lo que ofrece su servicio de alojamiento.

Josh Lindsey
fuente
Lo único que cambié, ya que estoy trabajando en RubyMine, es que reemplacé el touch .gitignore con la creación de un proyecto de rieles con sus 66 archivos predeterminados. ¡Muchas gracias!
Donald Hughes
Felicitaciones por enumerar los comandos. Así es como también configuré repositorios remotos.
Dave Bacher
55
Debo agregar que si desea que otras personas colaboren con usted en este repositorio, debe agregarlo --sharedal final del git --bare initcomando. Esto configurará los permisos necesarios.
Josh Lindsey
Gracias por esta respuesta Es muy útil tener cosas como esta que completen las cosas que faltan en los que son muy buenos libros sobre git, pero que aún no cubren mucho trabajo de conversión de CVS.
octopusgrabbus
21
Me gusta correr en git push --set-upstream origin masterlugar de git push origin masterla primera vez. Esto me permite simplemente escribir git pusho en git pulllugar de git push origin mastercada vez. Lo que se ajuste a tus preferencias.
Rick Smith
8

Puedes probar esto:

en el servidor:

agregar un nuevo grupo a me /etc/groupgusta (ejemplo)

mygroup:1001:michael,nir

crear nuevo repositorio 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)

en el cliente:

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

(Gracias Josh Lindsey por el lado del cliente)

después del cliente, haga en el servidor estos comandos:

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

Si tiene este error después de 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>

tratar:

git push -u origin master

Ayudará.

Miguel
fuente
5

Debe agregar al menos un archivo al repositorio antes de confirmar, por ejemplo .gitignore.

Benjamin Wohlwend
fuente
Supongo que la forma en que trato de usarlo es agregar los archivos inicialmente desde mi cliente, ya que ahí es donde escribo el código. ¿Está conceptualmente fuera de lugar en git? ¿Debo comprometerme primero con el cliente y luego enviarlo al servidor?
Donald Hughes
5

Si su proyecto no tiene una rama ascendente, es decir, si esta es la primera vez que el repositorio remoto va a saber acerca de la rama creada en su repositorio local, el siguiente comando debería funcionar.

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

@Josh Lindsey ya respondió perfectamente bien. Pero quiero agregar alguna información ya que a menudo uso ssh.

Por lo tanto solo cambia:

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

a:

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

Tenga en cuenta que los dos puntos entre el dominio y la ruta ya no están allí.

JWo
fuente
1

Debe configurar el repositorio remoto en su cliente:

git remote add origin ssh://myserver.com/path/to/project
Dave Bacher
fuente
Ejecuté ese comando, pero un "maestro de origen de git push" todavía da como resultado un "error al empujar algunas referencias". Intenté hacer un "maestro de origen de extracción de git" y recibí un "no se pudo encontrar el maestro de referencia remoto".
Donald Hughes
No estoy seguro de si hace la diferencia, pero mis repositorios remotos se crean con git --bare init@Josh Lindsey recomienda.
Dave Bacher
Tuve el mismo problema "no pude empujar algunas referencias" ... tratando de empujar la rama maestra de un repositorio a uno que creé ... luego noté que la fuente no tiene una rama maestra - asegúrese de que la rama que está intentando para empujar existe :)
Datum Geek