Как сделать начальный push-запрос к удаленному репозиторию с помощью Git?

173

Я прочитал бесчисленные учебные пособия, и я продолжаю терпеть неудачу. Вот что у меня есть:

- Я запускаю RubyMine на своем рабочем столе Windows
- Я установил Git на свою учетную запись хостинга WebFaction согласно их инструкциям
- Git, кажется, работает нормально на обеих машинах

Вот что я делаю:
1. На сервере:
         a. проект MKDIR
         б. git init
         c. мерзавец добавить.
         д. git commit <--- "нечего коммитить"
2. На клиенте:
         a. Создать новый проект в RubyMine.
         б. "git init" в верхнем каталоге проекта
         c. «Нажмите изменения» на сервере <---- «не удалось отправить некоторые ссылки на ...».

Какие шаги я пропускаю?

Дональд Хьюз
источник

Ответы:

393

На сервере:

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

На клиенте:

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

Обратите внимание, что когда вы добавляете источник, вы можете использовать несколько форматов и схем. Я рекомендую вам посмотреть, что предоставляет ваш хостинг.

Джош Линдси
источник
Единственное, что я изменил, так как я работаю из RubyMine, это то, что я заменил сенсорный .gitignore созданием проекта rails с 66 файлами по умолчанию. Большое спасибо!
Дональд Хьюз
Престижность для перечисления команд. Вот так я и настроил удаленные репозитории.
Дэйв Бачер
5
Я должен добавить, что если вы хотите, чтобы другие люди сотрудничали с вами в этом репо, вы должны добавить --sharedв конец git --bare initкоманды. Это позволит настроить необходимые разрешения.
Джош Линдси
Спасибо за этот ответ. Очень полезно иметь такие вещи, которые восполняют недостающие вещи в очень хороших книгах по git, но все же не охватывают большую работу по конвертации из CVS.
octopusgrabbus
21
Мне нравится бегать git push --set-upstream origin masterвместо git push origin masterпервого раза. Это позволяет мне просто печатать git pushили git pullвместо git push origin masterкаждого раза. Все, что соответствует вашим предпочтениям.
Рик Смит
8

Вы можете попробовать это:

на сервере:

добавление новой группы в /etc/groupлайк (пример)

mygroup:1001:michael,nir

создать новый репозиторий 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)

на клиенте:

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

(Спасибо Джошу Линдси за клиентскую сторону)

после клиента выполните на сервере следующие команды:

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

Если появилась эта ошибка после 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>

пытаться:

git push -u origin master

Это поможет.

Майкл
источник
5

Вы должны добавить хотя бы один файл в хранилище перед фиксацией, например .gitignore.

Бенджамин Вольвенд
источник
Я предполагаю, что способ, которым я пытаюсь использовать это, состоит в добавлении файлов первоначально из моего клиента, так как именно там я пишу код. Это концептуально неуместно в мерзавце? Нужно ли сначала фиксировать данные на клиенте, а затем отправлять их на сервер?
Дональд Хьюз
5

Если ваш проект не имеет ветки upstream, то есть, если это первый раз, когда удаленный репозиторий узнает о ветке, созданной в вашем локальном репозитории, должна работать следующая команда.

git push --set-upstream origin <branch-name>
Мария
источник
3

@ Джош Линдси уже ответил отлично. Но я хочу добавить некоторую информацию, так как я часто использую ssh.

Поэтому просто поменяйте:

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

чтобы:

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

Обратите внимание, что двоеточие между доменом и путем больше не существует.

JWo
источник
1

Вам необходимо настроить удаленный репозиторий на вашем клиенте:

git remote add origin ssh://myserver.com/path/to/project
Дэйв Бачер
источник
Я выполнил эту команду, но «мастер отправки git push» по-прежнему приводит к «не удалось нажать некоторые ссылки». Я попытался сделать «мастер происхождения git pull» и получил «не могу найти удаленный мастер ссылок».
Дональд Хьюз
Я не уверен, имеет ли это значение, но мои удаленные репозитории создаются, git --bare initкак рекомендует @Josh Lindsey.
Дейв Бачер
у меня возникла та же проблема "не удалось отправить некоторые ссылки" ... пытаясь перенести основную ветку из репозитория в созданное мной ... потом я заметил, что у источника нет основной ветки - убедитесь, что ветка, которую вы пытаетесь толкать существует :)
Datum Geek