Я додаю цю відповідь, тому що після приїзду сюди (з тим же запитанням) жодна з відповідей не описує всіх необхідних кроків, необхідних для переходу від нічого до повністю придатного віддаленого (голого) репо.
Примітка: у цьому прикладі використовуються локальні шляхи для розташування голого репо, але інші протоколи git (наприклад, SSH, вказані ОП) повинні працювати чудово.
Я намагався додати кілька записок для тих, хто менш знайомий з git.
1. Ініціалізуйте голий репо ...
> git init --bare /path/to/bare/repo.git
Initialised empty Git repository in /path/to/bare/repo.git/
Це створює папку (repo.git) і заповнює її файлами git, що представляють собою git repo. На сьогоднішній день ця репо є марною - вона не має жодних комісій і, що ще важливіше, немає гілок . Хоча ви можете клонувати це репо, ви не можете його витягнути.
Далі нам потрібно створити робочу папку. Існує кілька способів зробити це, залежно від того, чи є у вас наявні файли.
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
2б. Створіть робочу папку з існуючих файлів
Якщо у вас вже є папка з файлами в ній (тому ви не можете її клонувати), ви можете ініціалізувати нове git repo, додати першу фіксацію, а потім зв’язати її з голою репою згодом.
> 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 push, щоб встановити (нову) відстежувану гілку за течією. Як і раніше, зараз у нас є повністю функціональна гола репо, яку можна клонувати в іншому місці на головній гілці, а також локальну робочу копію, яка може тягнути і штовхати.
Деяке це може здатися очевидним для деяких, але git мене бентежить у найкращі часи (це повідомлення про помилки та повідомлення про стан справді потребує переробки) - сподіваємось, це допоможе іншим.
--shared
опцію,init
якщо ви плануєте, щоб інші люди підштовхували до цього репо. Він автоматично додає дозволу на групове записування до сховища - посилання