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?

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 youruser@yourserver.com:/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.


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 youruser@yourserver.com:/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.


5

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


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>

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 youruser@yourserver.com:/path/to/my_project.git

para:

git remote add origin ssh://youruser@yourserver.com/path/to/my_project

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


1

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

git remote add origin ssh://myserver.com/path/to/project

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.