Я добавляю этот ответ, потому что после прибытия сюда (с тем же вопросом) ни один из ответов на самом деле не описывает все необходимые шаги, необходимые для перехода от ничего к полностью используемому удаленному (голому) репо.
Примечание: в этом примере используются локальные пути для размещения чистого репо, но другие протоколы 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. В настоящее время это репо бесполезно - у него нет коммитов и, что более важно, нет веток . Хотя вы можете клонировать этот репо, вы не можете вытащить его.
Далее нам нужно создать рабочую папку. Есть несколько способов сделать это, в зависимости от того, есть ли у вас файлы.
2а. Создайте новую рабочую папку (без существующих файлов), клонируя пустое хранилище.
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 adelphus@example.com
> 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
...
На данный момент у нас есть наш первый коммит и локальная ветка master, которую нам нужно превратить в ветвь ветки с удаленным отслеживанием.
> 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 push, чтобы установить (новую) отслеживаемую ветвь вверх по течению. Как и раньше, теперь у нас есть полностью функциональное голое репо, которое можно клонировать в другом месте главной ветки, а также локальная рабочая копия, которая может тянуть и толкать.
Все это может показаться очевидным для некоторых, но git смущает меня в лучшие времена (это сообщения об ошибках и сообщения о состоянии действительно нуждаются в доработке) - надеюсь, это поможет другим.
--sharedопцию,initесли вы планируете, чтобы другие люди подталкивали к этому репо. Он автоматически добавляет групповые разрешения на запись в хранилище - ссылка