Como faço um envio inicial para um repositório remoto com o Git?

173

Eu li vários tutoriais e continuo sendo breve. Aqui está o que eu tenho:

- Estou executando o RubyMine na área de trabalho do Windows
- Instalei o Git na minha conta de hospedagem WebFaction de acordo com as instruções
- O Git parece estar funcionando bem nas duas máquinas

Aqui está o que estou fazendo:
1. No servidor:
         a. projeto mkdir
         b. git init
         c. git add.
         d. git commit <--- "nada a confirmar"
2. No cliente:
         a. Crie um novo projeto no RubyMine.
         b. "git init" no diretório superior do projeto
         c. "Enviar alterações" para o servidor <---- "falhou ao enviar algumas referências para ...".

Que etapas estou faltando?

Donald Hughes
fonte

Respostas:

393

No servidor:

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

No 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

Observe que quando você adiciona a origem, existem vários formatos e esquemas que você pode usar. Eu recomendo que você veja o que seu serviço de hospedagem oferece.

Josh Lindsey
fonte
A única coisa que mudei, já que estou trabalhando no RubyMine, é que substituí o touch .gitignore pela criação de um projeto rails com seus 66 arquivos padrão. Muito obrigado!
Donald Hughes
Parabéns por listar os comandos. Foi assim que também configurei repositórios remotos.
Dave Bacher
5
Devo acrescentar que, se você quiser que outras pessoas colaborem com você neste repositório, adicione --sharedao final do git --bare initcomando. Isso irá configurar as permissões necessárias.
Josh Lindsey
Obrigado por esta resposta. É muito útil ter coisas como essas que preenchem as coisas que faltam nos livros muito bons sobre o git, mas ainda não cobrem muito trabalho de conversão do CVS.
Octopusgrabbus 30/11
21
Eu gosto de correr em git push --set-upstream origin mastervez da git push origin masterprimeira vez. Isso me permite digitar git pushou em git pullvez de git push origin mastersempre. Qualquer que seja a sua preferência.
22613 Rick Smith
8

Você pode tentar isso:

no servidor:

adicionando novo grupo para /etc/groupcurtir (exemplo)

mygroup:1001:michael,nir

crie um novo repositório 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)

no 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

(Obrigado Josh Lindsey pelo lado do cliente)

após o cliente, execute no servidor estes comandos:

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

Se esse erro ocorrer após o 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>

experimentar:

git push -u origin master

Isso vai ajudar.

Michael
fonte
5

Você precisa adicionar pelo menos um arquivo ao repositório antes de confirmar, por exemplo .gitignore.

Benjamin Wohlwend
fonte
Acho que o jeito que estou tentando usá-lo é adicionar os arquivos inicialmente do meu cliente, já que é onde escrevo o código. Isso conceitualmente está fora de lugar no git? Preciso confirmar primeiro no cliente e depois enviar para o servidor?
Donald Hughes
5

Se o seu projeto não tiver uma ramificação upstream, ou seja, é a primeira vez que o repositório remoto saberá sobre a ramificação criada em seu repositório local, o seguinte comando deverá funcionar.

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

Josh Lindsey já respondeu perfeitamente bem. Mas quero adicionar algumas informações, já que frequentemente uso o ssh.

Portanto, apenas mude:

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

para:

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

Observe que os dois pontos entre domínio e caminho não estão mais lá.

JWo
fonte
1

Você precisa configurar o repositório remoto no seu cliente:

git remote add origin ssh://myserver.com/path/to/project
Dave Bacher
fonte
Eu executei esse comando, mas um "mestre de origem do git push" ainda resulta em "falha ao enviar alguns refs". Tentei fazer um "mestre de origem do git pull" e recebi um "não foi possível encontrar o mestre de ref remoto".
Donald Hughes
Não tenho certeza se isso faz diferença, mas meus repositórios remotos são criados com o git --bare initque Josh Lindsey recomenda.
Dave Bacher
Eu tive o mesmo problema "falha ao enviar algumas referências" ... tentando enviar a ramificação principal de um repositório para uma que eu criei ... então notei que a fonte não tem uma ramificação principal - verifique se a ramificação que você está tentando a existência de pressão :)
Datum Geek