Я добавляю этот ответ, потому что после прибытия сюда (с тем же вопросом), ни один из ответов на самом деле не описать все необходимые шаги, необходимые перейти от ничего к полностью используемому удаленному (голой) репо.
Примечание: в этом примере используются локальные пути для расположения голого репо, но другие протоколы git (например, SSH, указанные OP) должны работать нормально.
Я попытался добавить некоторые заметки по пути для тех, кто менее знаком с git.
1. Инициализировать голую репо ...
> git init --bare /path/to/bare/repo.git
Initialised empty Git repository in /path/to/bare/repo.git/
Это создает папку (repo.git) и заполнит его GIT файлов, представляющих собой GIT репозиторий. В его нынешнем виде это репо бесполезно - у него нет коммитов и, что более важно, нет ответвлений. Хотя вы можете клонировать это репо, вы не можете от него отказаться.
Далее мы должны создать рабочую папку. Есть несколько способов сделать это, в зависимости от того, есть ли у вас существующие файлы.
2a.Создать новую рабочую папку (не существующие файлы) клонированием пустому Repo
git clone /path/to/bare/repo.git /path/to/work
Cloning into '/path/to/work'...
warning: You appear to have cloned an empty repository.
done.
Эта команда будет работать, только если /path/to/work
не существует или пустая папка. Обратите внимание на предупреждение - на этом этапе у вас все еще нет ничего полезного. Если вы cd /path/to/work
и запустить git status
, вы получите что-то вроде:
On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)
, но это ложь. Вы на самом деле не на ветке master
(потому что git branch
ничего не возвращает), и до сих пор никаких коммитов нет.
Затем скопируйте/переместите/создайте некоторые файлы в рабочей папке, добавьте их в git и создайте первое коммитирование.
> cd /path/to/work
> echo 123 > afile.txt
> git add .
> git config --local user.name adelphus
> git config --local user.email [email protected]
> git commit -m "added afile"
[master (root-commit) 614ab02] added afile
1 file changed, 1 insertion(+)
create mode 100644 afile.txt
В git config
команды нужны, только если вы еще не сказали, мерзавец, кто ты. Обратите внимание, что если вы сейчас запустите git branch
, вы увидите виджет master
. Теперь запустите git status
:
On branch master
Your branch is based on 'origin/master', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
nothing to commit, working directory clean
Это также вводит в заблуждение - вверх по течению не «ушла», она просто не была создана еще и git branch --unset-upstream
не поможет. Но все в порядке, теперь, когда у нас есть первая фиксация, мы можем нажать и мастер создать на голом репо.
> git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 207 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /path/to/bare/repo.git
* [new branch] master -> master
На данный момент мы имеем полнофункциональную голую репо, которые могут быть клонированы в другом месте на главной ветви, а также локальной рабочей копии, которая может тянуть и толкать.
> git pull
Already up-to-date.
> git push origin master
Everything up-to-date
2b. Создайте рабочую папку из существующих файлов. Если у вас уже есть папка с файлами (так что вы не можете клонировать ее), вы можете инициализировать новую репозицию git, добавить первую фиксацию и затем связать ее с голым репо после этого.
> cd /path/to/work_with_stuff
> git init
Initialised empty Git repository in /path/to/work_with_stuff
> git add .
# add git config stuff if needed
> git commit -m "added stuff"
[master (root-commit) 614ab02] added stuff
20 files changed, 1431 insertions(+)
create mode 100644 stuff.txt
...
На данный момент у нас есть первый и совершить местный мастер ветвь, которую мы должны превратить в пульт дистанционного отслеживаются ветви вверх по течению.
> git remote add origin /path/to/bare/repo.git
> git push -u origin master
Counting objects: 31, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (31/31), done.
Writing objects: 100% (31/31), 43.23 KiB | 0 bytes/s, done.
Total 31 (delta 11), reused 0 (delta 0)
To /path/to/bare/repo.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
Обратите внимание на -u
флаг на мерзавец толчок, чтобы установить (новый) отслеживается вверх по течению ветви. Как и раньше, теперь у нас есть полностью функциональное голое репо, которое можно клонировать в другом месте на главной ветке, а также локальную рабочую копию, которая может тянуть и толкать.
Все это может показаться очевидным для некоторых, но git смущает меня в лучшие времена (сообщения об ошибках и статусах действительно нуждаются в некоторой доработке) - надеюсь, это поможет другим.
Вы также можете добавить опцию '--shared' для' init', если вы планируете использовать другие люди для этого репо. Он автоматически добавляет права на запись группы в репозиторий - [link] (http://git-scm.com/book/en/Git-on-the-Server-Getting-Git-on-a-Server) – prasanthv
Я думаю, что эти три линии имеют один и тот же эффект, чем это только один: мерзавец --bare INIT test_repo.git по крайней мере, с моей текущей версии мерзавца (1.8.2.2) –
@Fran Не хорошо для 1,7 * версия кажется:. \ – deepdive