Yerel bir depo nasıl eklenir ve uzak bir depo gibi davranılır


234

bakYerel bir repo, aşağıdakileri kullanarak bilgisayarımdaki başka bir yerel repo adıyla bir uzaktan kumanda gibi davranmaya çalışıyorum :

git remote add /home/sas/dev/apps/smx/repo/bak/ontologybackend/.git bak

ki bu hata veriyor:

fatal: '/home/sas/dev/apps/smx/repo/bak/ontologybackend/.git' is not a valid remote name

Biri diğeri bakiçin adlandırılmış bir uzak olarak yapılandırılmış ve daha sonra veren iki yerel depoları senkronize etmeye çalışıyorum git pull bak.

Bunu yapmanın en iyi yolu ne?


Düzenle:

Üzgünüm, aptal bana, uzaktan eklemenin olması gerektiğini fark ettim:

git remote add bak /home/sas/dev/apps/smx/repo/bak/ontologybackend/.git

uzaktan kumandanın adı adresten önce gelir.

Yanıtlar:


273

Komutla ilgili argümanlarınız remote addgeri alındı:

git remote add <NAME> <PATH>

Yani:

git remote add bak /home/sas/dev/apps/smx/repo/bak/ontologybackend/.git

Daha git remote --helpfazla bilgi için bakınız .


6
Is .gitsonunda özellikle olsa gerekli?
Erik Aigner

5
Bu sadece bir yoldur ... Git ne ismini umursamıyor.
larsks

2
@ErikAigner geleneksel olarak, çıplak depolar bir ".git" sonekiyle biter. Genellikle kendi dizini gibi değil, "/path/to/projectname.git" gibi. - Bunun dışında çok az fark yaratıyor.
Atli

7
Görünüşe göre, benim için açık olmayan mutlak bir yol kullanmanız gerekiyor. Göreli bir yolla denediğimde anladım fatal: '../dir' does not appear to be a git repository.
Keith Layne

1
file://İstemci yazılımının beklenen protokol üzerinden erişebilmesi için yolun önüne koymak ve yerel veri havuzunun tam yolunu kullanmak önemlidir . Ve Erik'in yukarıdaki sorusuna cevap olarak .git, yolun sonunda görünüşte gerekli.
Scott Lahteine

158

Amacınız, kolay yedekleme veya harici bir sürücüye yapıştırma veya bulut depolama (Dropbox, vb.) Yoluyla paylaşım için deponun yerel bir kopyasını tutmaksa, çıplak bir depo kullanmak isteyebilirsiniz . Bu, paylaşım için optimize edilmiş bir çalışma dizini olmadan deponun bir kopyasını oluşturmanıza olanak tanır.

Örneğin:

$ git init --bare ~/repos/myproject.git
$ cd /path/to/existing/repo
$ git remote add origin ~/repos/myproject.git
$ git push origin master

Benzer şekilde, bu bir uzak repo gibi klonlayabilirsiniz:

$ git clone ~/repos/myproject.git

9
Kabul edilen cevap bu olmalı, çünkü “En iyi yol nedir?” Sorusuna mükemmel bir şekilde uyuyor. @Opensas'ın dediği gibi "uzak repo olarak muamele gören yerel repo" gerçekten de çıplak bir dizindir (tıpkı gerçek bir uzak depo gibi)
Jack

1
Bir düzenleme öneriyorum: "git remot add .." kullanmanız gerekip gerekmediği "+" git push "veya sadece" git clone "burada belirtilir: stackoverflow.com/a/31590993/5446285 (adelphus'un cevabı)
Jack

1
@Jack - kafa karıştırıcı bulduğunuz şey hakkında biraz ayrıntı verebilir misiniz? Değiştirmekten mutluyum ama cevabı nispeten özlü tutmak istiyorum.
Matt Sanders

6

Biçiminizin yanlış olduğu anlaşılıyor:

Yerel olarak oluşturulmuş bir depoyu paylaşmak istiyorsanız veya başka bir veri havuzundan katkıda bulunmak istiyorsanız - yeni bir depoyla herhangi bir şekilde etkileşim kurmak istiyorsanız, genellikle uzaktan kumanda olarak eklemek en kolay yoldur. Bunu git remote add [alias] [url] komutunu çalıştırarak yaparsınız. Bu, [takma ad] adlı yerel bir uzaktan kumandanın altına [url] ekler.

#example
$ git remote
$ git remote add github git@github.com:schacon/hw.git
$ git remote -v

http://gitref.org/remotes/#remote


0

Bu yanıtı, yerel bir uzaktan kumandaya sahip yerel bir repo oluşturmanın üç farklı senaryosunu kapsayan açıklamalara sahip bir komut dosyası sağlamak için gönderiyorum. Komut dosyasının tamamını çalıştırabilirsiniz ve ana klasörünüzde test depolarını oluşturacaktır (windows git bash üzerinde test edilmiştir). Açıklamalar kişisel notlarınıza daha kolay kaydetmek için komut dosyasının içindedir, örneğin Visual Studio Code'dan okunabilir.

Ayrıca teşekkür etmek istiyorum Jack'in adelphus'un konuyla ilgili açıklamaları iyi, ayrıntılı, ellerde olduğu bu cevaba bağladığı .

Bu benim ilk yazım, bu yüzden neyin iyileştirilmesi gerektiğini tavsiye edin.

## SETUP LOCAL GIT REPO WITH A LOCAL REMOTE
# the main elements:
# - remote repo must be initialized with --bare parameter
# - local repo must be initialized
# - local repo must have at least one commit that properly initializes a branch(root of the commit tree)
# - local repo needs to have a remote
# - local repo branch must have an upstream branch on the remote

{ # the brackets are optional, they allow to copy paste into terminal and run entire thing without interruptions, run without them to see which cmd outputs what

cd ~
rm -rf ~/test_git_local_repo/

## Option A - clean slate - you have nothing yet

mkdir -p ~/test_git_local_repo/option_a ; cd ~/test_git_local_repo/option_a
git init --bare local_remote.git # first setup the local remote
git clone local_remote.git local_repo # creates a local repo in dir local_repo
cd ~/test_git_local_repo/option_a/local_repo
git remote -v show origin # see that git clone has configured the tracking
touch README.md ; git add . ; git commit -m "initial commit on master" # properly init master
git push origin master # now have a fully functional setup, -u not needed, git clone does this for you

# check all is set-up correctly
git pull # check you can pull
git branch -avv # see local branches and their respective remote upstream branches with the initial commit
git remote -v show origin # see all branches are set to pull and push to remote
git log --oneline --graph --decorate --all # see all commits and branches tips point to the same commits for both local and remote

## Option B - you already have a local git repo and you want to connect it to a local remote

mkdir -p ~/test_git_local_repo/option_b ; cd ~/test_git_local_repo/option_b
git init --bare local_remote.git # first setup the local remote

# simulate a pre-existing git local repo you want to connect with the local remote
mkdir local_repo ; cd local_repo
git init # if not yet a git repo
touch README.md ; git add . ; git commit -m "initial commit on master" # properly init master
git checkout -b develop ; touch fileB ; git add . ; git commit -m "add fileB on develop" # create develop and fake change

# connect with local remote
cd ~/test_git_local_repo/option_b/local_repo
git remote add origin ~/test_git_local_repo/option_b/local_remote.git
git remote -v show origin # at this point you can see that there is no the tracking configured (unlike with git clone), so you need to push with -u
git push -u origin master # -u to set upstream
git push -u origin develop # -u to set upstream; need to run this for every other branch you already have in the project

# check all is set-up correctly
git pull # check you can pull
git branch -avv # see local branch(es) and its remote upstream with the initial commit
git remote -v show origin # see all remote branches are set to pull and push to remote
git log --oneline --graph --decorate --all # see all commits and branches tips point to the same commits for both local and remote

## Option C - you already have a directory with some files and you want it to be a git repo with a local remote

mkdir -p ~/test_git_local_repo/option_c ; cd ~/test_git_local_repo/option_c
git init --bare local_remote.git # first setup the local remote

# simulate a pre-existing directory with some files
mkdir local_repo ; cd local_repo ; touch README.md fileB

# make a pre-existing directory a git repo and connect it with local remote
cd ~/test_git_local_repo/option_c/local_repo
git init
git add . ; git commit -m "inital commit on master" # properly init master
git remote add origin ~/test_git_local_repo/option_c/local_remote.git
git remote -v show origin # see there is no the tracking configured (unlike with git clone), so you need to push with -u
git push -u origin master # -u to set upstream

# check all is set-up correctly
git pull # check you can pull
git branch -avv # see local branch and its remote upstream with the initial commit
git remote -v show origin # see all remote branches are set to pull and push to remote
git log --oneline --graph --decorate --all # see all commits and branches tips point to the same commits for both local and remote
}

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.