Bu yanıtı ekliyorum çünkü buraya geldikten sonra (aynı soru ile), cevapların hiçbiri hiçbir şeyden tamamen kullanılabilir bir uzaktan (çıplak) repoya gitmek için gerekli tüm adımları açıklamıyor.
Not: Bu örnekte, çıplak reponun konumu için yerel yollar kullanılır, ancak diğer git protokolleri (OP tarafından belirtilen SSH gibi) iyi çalışmalıdır.
Git'e daha az aşina olanlar için yol boyunca bazı notlar eklemeye çalıştım.
1. Çıplak depoyu başlatın ...
> git init --bare /path/to/bare/repo.git
Initialised empty Git repository in /path/to/bare/repo.git/
Bu bir klasör oluşturur (repo.git) ve bir git repo'yu temsil eden git dosyalarıyla doldurur. Haliyle, bu repo işe yaramaz - taahhütleri ve daha da önemlisi şubeleri yoktur . Bu repoyu klonlayabilseniz de, ondan çekemezsiniz.
Ardından, bir çalışma klasörü oluşturmamız gerekiyor. Mevcut dosyalarınız olup olmadığına bağlı olarak bunu yapmanın birkaç yolu vardır.
2a. Boş depoyu klonlayarak yeni bir çalışma klasörü oluşturun (mevcut dosya yok)
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.
Bu komut yalnızca /path/to/workyoksa veya boş bir klasör olduğunda çalışır. Uyarıyı not edin - bu aşamada hala yararlı bir şeyiniz yok. Eğer cd /path/to/workkoşarsanız git status, şöyle bir şey elde edersiniz:
On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)
ama bu bir yalan. Gerçekten şubede değilsiniz master(çünkü git branchhiçbir şey döndürmez) ve şimdiye kadar hiçbir taahhüt yoktur.
Ardından, çalışma klasöründeki bazı dosyaları kopyalayın / taşıyın / oluşturun, onları git'e ekleyin ve ilk taahhüdü oluşturun.
> 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 configZaten sen budala söylemedim eğer komutlar sadece ihtiyaç vardır. Şimdi koşarsanız git branch, masterlistelenen dalı göreceğinizi unutmayın . Şimdi çalıştırın 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
Bu da yanıltıcı - yukarı akış "gitmedi", henüz yaratılmadı ve git branch --unset-upstreamyardımcı olmayacak. Ama sorun değil, şimdi ilk taahhüdümüz var, itebiliriz ve çıplak repoda ustalaşacağız.
> 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
Bu noktada, bir ana dalda başka bir yerde klonlanabilen tamamen işlevsel bir çıplak reponun yanı sıra çekip itebilen yerel bir çalışma kopyası var.
> git pull
Already up-to-date.
> git push origin master
Everything up-to-date
2b. Mevcut dosyalardan çalışma klasörü oluşturma
İçinde dosya bulunan bir klasörünüz varsa (içine klonlayamazsınız), yeni bir git repo başlatabilir, ilk taahhüdü ekleyebilir ve daha sonra onu çıplak repoya bağlayabilirsiniz.
> 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
...
Bu noktada ilk taahhüdümüz ve uzaktan izlenen bir yukarı akış şubesine dönüştürmemiz gereken yerel bir ana dalımız var.
> 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.
Not -u(yeni) memba şube izlenen ayarlamak için git push üzerinde bayrak. Daha önce olduğu gibi, artık bir ana dalda başka bir yerde klonlanabilen tamamen işlevsel bir çıplak repo ve çekip itebilen yerel bir çalışma kopyası var.
Bütün bunlar bazıları için açık görünebilir, ancak git beni en iyi durumda karıştırır (hata ve durum mesajlarının gerçekten biraz yeniden işlenmeye ihtiyacı vardır) - umarım bu başkalarına yardımcı olacaktır.
--sharedseçeneğini de ekleyebilirsinizinit.