Sen eklemiş vendor/plugins/open_flash_chart_2
“gitlink” girişi olarak değil, bir alt modülün olarak tanımlanan olmadı. Etkili olarak git alt modülünün kullandığı dahili özelliği kullanıyorsunuz (gitlink girdileri) ancak alt modül özelliğinin kendisini kullanmıyorsunuz.
Muhtemelen böyle bir şey yaptınız:
git clone git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
git add vendor/plugins/open_flash_chart_2
Bu son komut sorun. Dizin vendor/plugins/open_flash_chart_2
bağımsız bir Git deposu olarak başlar. Genellikle bu tür alt depoları göz ardı edilir, ancak söylesem git eklenti açıkça eklemek için, o zaman alt deponun HEAD işaret dizinin içeriğini eklemek yerine taahhüt dair bir gitlink giriş oluşturulur. Git add'in böyle bir "yarı alt modüller" oluşturmayı reddetmesi hoş olabilir .
Normal dizinler Git'te ağaç nesneleri olarak gösterilir; ağaç nesneleri içerdikleri nesnelere adlar ve izinler verir (genellikle diğer ağaç ve blob nesneleri - sırasıyla dizinler ve dosyalar). Alt modüller “gitlink” girdileri olarak temsil edilir; gitlink girdileri yalnızca alt modülün HEAD komutunun nesne adını (hash) içerir. Bir gitlink komutunun “kaynak deposu” .gitmodules
dosyada (ve .git/config
alt modül başlatıldıktan sonra dosyada) belirtilir.
Sahip olduğunuz şey, söz konusu taahhüdün kaynak deposunu kaydetmeden belirli bir taahhüdün işaretidir. Bu, gitlink'inizi uygun bir alt modüle dönüştürerek veya gitlink'i kaldırıp "normal" içerikle (düz dosyalar ve dizinler) değiştirerek düzeltebilirsiniz.
Uygun Bir Modüle Dönüştürün
vendor/plugins/open_flash_chart_2
Bir alt modül olarak düzgün bir şekilde tanımlamak için eksik olan tek bit bir .gitmodules
dosyadır. Normalde (daha önce çıplak gitlink girişi olarak eklemediyseniz) şunu kullanırsınız git submodule add
:
git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
Bulduğunuz gibi, yol zaten dizinde varsa bu çalışmaz. Çözüm, gitlink girişini geçici olarak dizinden kaldırmak ve sonra alt modülü eklemektir:
git rm --cached vendor/plugins/open_flash_chart_2
git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
Bu, mevcut alt havuzunuzu kullanır (yani kaynak veri havuzunu yeniden klonlamaz) ve .gitmodules
şöyle görünen bir dosya hazırlar:
[submodule "vendor/plugins/open_flash_chart_2"]
path = vendor/plugins/open_flash_chart_2
url = git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
Aynı zamanda ana havuzunuzda da benzer bir giriş yapar .git/config
( path
ayar olmadan ).
Bunu taahhüt edin ve uygun bir alt modüle sahip olacaksınız. Havuzu klonladığınızda (veya GitHub'a itip oradan klonla), alt modülü yeniden başlatabilmeniz gerekir git submodule update --init
.
Düz İçerikle Değiştir
Bir sonraki adım, alt deponuzun vendor/plugins/open_flash_chart_2
korumak istediğiniz herhangi bir yerel geçmişe sahip olmadığını varsayar .
Önem verdiğiniz alt depoda yerel geçmişiniz varsa, .git
aşağıdaki ikinci komutta silmeden önce alt havuzun dizinini yedeklemelisiniz . (Ayrıca , alt deponun HEAD geçmişini koruyan git alt ağacı örneğini de göz önünde bulundurun ).
git rm --cached vendor/plugins/open_flash_chart_2
rm -rf vendor/plugins/open_flash_chart_2/.git # BACK THIS UP FIRST unless you are sure you have no local changes in it
git add vendor/plugins/open_flash_chart_2
Bu kez dizin eklenirken, bir alt depo değildir, bu nedenle dosyalar normal şekilde eklenir. Ne yazık ki, .git
dizini sildiğimizden beri kaynak havuzuyla işleri güncel tutmanın çok kolay bir yolu yoktur.
Bunun yerine bir alt ağaç birleştirme kullanmayı düşünebilirsiniz . Bunu yaptığınızda, dosyaları deponuzda “düz” tutarken (alt modül olmadan) kaynak havuzdaki değişiklikleri kolayca çekebilirsiniz. Üçüncü taraf git subtree komutu , alt ağaç birleştirme işlevselliği etrafında hoş bir pakettir.
git rm --cached vendor/plugins/open_flash_chart_2
git commit -m'converting to subtree; please stand by'
mv vendor/plugins/open_flash_chart_2 ../ofc2.local
git subtree add --prefix=vendor/plugins/open_flash_chart_2 ../ofc2.local HEAD
#rm -rf ../ofc2.local # if HEAD was the only tip with local history
Sonra:
git remote add ofc2 git://github.com/korin/open_flash_chart_2_plugin.git
git subtree pull --prefix=vendor/plugins/open_flash_chart_2 ofc2 master
git subtree push --prefix=vendor/plugins/open_flash_chart_2 git@github.com:me/my_ofc2_fork.git changes_for_pull_request
git subtree ayrıca, --squash
kaynak havuzun geçmişini geçmişinize eklemekten kaçınmanıza izin veren, ancak yine de yukarı akış değişikliklerini çekmenizi sağlayan bir seçeneğe sahiptir .