Orijinal deponun bir klonundan çatalıma nasıl geçebilirim?


124

GitHub'da myrepobaşka bir deponun (hadi onu arayalım ) bir çatal oluşturdum (diyelim orirepo). Daha sonra klonladım orirepo.

git clone https://github.com/original/orirepo.git

Yaklaşık 20 dosyayı değiştirdim, sonra değişikliğimi hazırladım ve bir taahhütte bulundum

git add
git commit

Ancak, itmeye çalıştığımda

git push

Bu hatayı aldım:

remote: Permission to original/orirepo.git denied to mylogin.
fatal: unable to access 'https://github.com/original/orirepo.git/': The requested URL returned error: 403

Bir hata yaptığımı biliyorum: Bunun yerine çatalımı klonlamalıydım orirepo, ama bunun için artık çok geç. origin/orirepoYazma erişimim olmayan çatalıma nasıl itebilirim ?

Yanıtlar:


188

Varsayılan olarak, bir depoyu klonladığınızda

  • Şuna bulunduğu https://github.com/original/orirepo.git,
  • mevcut şubesi denen master,

sonra

  • sonuçta ortaya çıkan klonun yerel yapılandırması, originklonladığınız deponun URL'si ile ilişkilendirilen yalnızca bir uzaktan kumandayı listeler ;
  • masterklonunuzdaki yerel şube izlenecek şekilde ayarlanmıştır origin/master.

Bu nedenle, klonunuzun yapılandırmasını değiştirmezseniz Git,

git push

gibi

git push origin master:origin/master

Başka bir deyişle, git pushyerel masterşubenizi masteruzak depoda bulunan şubeye itme girişimleri (klonunuz tarafından bilinir origin). Ancak, bu uzak depoya yazma erişiminiz olmadığı için bunu yapmanıza izin verilmiyor.

Gerek

  1. originçatalınızla ilişkilendirilecek uzaktan kumandayı yeniden tanımlayın,

    git remote set-url origin https://github.com/RemiB/myrepo.git
    
  2. veya originuzaktan kumandanın orijinal tanımını korumak istiyorsanız myrepo, çatalınız ile ilişkili yeni bir uzaktan kumanda ( burada denir ) tanımlayın :

    git remote add myrepo https://github.com/RemiB/myrepo.git
    

    O zaman yerel masterşubenizi çatalınıza itebilmelisiniz.

    git push myrepo master
    

    Ve Git'e bundan git pushsonra myrepobunun yerine itmesi gerektiğini söylemek istiyorsanız origin,

    git push -u myrepo master
    

yerine.


´git push -u´ da ´git çekme´ varsayılan davranışını değiştirecek mi?
benroth

1
Evet öyle, bu yüzden "push -u" yapmak yerine pushDefault seçeneğini kullanmalısınız: git config --add remote.origin.pushdefault myrepo ve sadece itmeyi etkileyecek ve mevcut tüm yeni dallar için geçerli olacaktır.
Marius K

1
Yaptım git remote set-url origin http://github.com/myname/reponameve sonra git push origin mybranch. Yaradı! Teşekkür ederim!
Geliştirici Marius Žilėnas

1
Uzaktan ekle kullanılıyorsa, çekmeyi nasıl etkiler? Nereden çekiyor? 2 repo arasında gelecekteki birleşmeyi nasıl ele alıyor?
Kok How Teh

1
@KokHowTeh Başka bir uzaktan kumanda eklemek, hangi uzak dalın (varsa) yerel dalın izlerini etkilemez. Ancak, git push -u myrepo masteryerel yöneticinizin izlemeye başlamasını sağlar myrepo/master. Bundan sonra git pull, usta iken koşarsanız, çekersiniz myrepove artık çekmezsiniz origin.
jub0bs

18

Yani, birisinin reposunu klonladınız ve değişiklikleri yaptınız ve sonra o depoya itemeyeceğinizi fark ettiniz, ancak kendi çatalınıza itebilirsiniz. Yani, devam ettiniz ve orijinal depoyu çatalladınız.

Tek yapmanız gereken, yerel klonunuzdaki kaynak URL'yi çatallı deponuzun URL'si ile değiştirmek.

Böyle yap

git remote set-url origin https://github.com/fork/name.git

https://github.com/fork/name.gitOrijinal depodan çatalınızın URL'si nerede .

Ondan sonra sadece

git push

ve değişikliklerinizi çatalınıza aktarabileceksiniz :)


bir cazibe gibi çalıştı, teşekkürler!
Rafael Ruales

7

Tamam, sonunda git yapılandırma dosyamı düzenledim:

$ nano .git/config

değiştirme :

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = https://github.com/<origin-project>/<origin-repo>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

için

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = https://github.com/<mylogin>/<myrepo>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

Sonra,

$ git push

Bir cazibe gibi çalıştı.

Veya Thiago F Macedo'nun cevabı sayesinde :

git remote set-url origin https://yourusername@github.com/user/repo.git

-5

Öncelikle hesabınızdaki çatallı depoyu klonlamalısınız.

git clone https://github.com/your_account/repo.git

Bu depoya gönderme izniniz kesinlikle var. Kodunuzu orijinal depoya göndermek istiyorsanız, bir çekme isteği gönderebilirsiniz.


Çatalı klonlamak istemiyorlar. Lütfen soruyu tekrar okuyun.
Ahmad Awais
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.