Git dallarında başarılı bir model
Git kullanmak için önemlidir, işbirlikçi geliştirme ortamı yazılım için yönetilebilir Bakımı dahil.
Bu yazı orijinal Portekizli bir sürümüdür, İngilizce, “Başarılı bir Git dallanma model“, Yazar tarafından usulüne uygun olarak yetkili, Vincent Driessen. Eyvallah adam!
Teknik sorunlar için, Bazı anahtar kelimeler İngilizce bilerek tutulmuştur. Metni özgünlük sağlamak çalıştı, Ama bizim dilde anlaşılmasını kolaylaştırmak için ayarlamalar yapmak zorunda itiraf (TR). Herhangi bir düzeltme veya öneri geliştirme çeviri için açığız.
Bu Git kullanmayı öğretme bir yazı değil. İstediğin buysa, Bir göz alarak öneriyorum Git el kitabı. Ne de bir yazılım sürüm oluşturma nasıl göstermek için amacımız, Bu durumda, bkz: Anlamsal sürüm oluşturma.
Ekip işbirliği yazılım sürüm oluşturma içinde yönetmek için önerisi olduğunu. Biliyor musun ne zaman sen-si olmak birkaç programcılar “karıştırma” aynı kaynak kodunda? Geliştirme hızlandırmak için önemlidir, Ama büyük baş ağrısı neden olabilir (önyargı ve yeniden işleme alınması) Bir denetim varsa. Bir uygulama geliştiricisi her üzerine yazmasını engellemek için diğer iş ve ilerici geliştirme sağlamak ve organize, çakışmaları en aza indirmek ve yazılım sürümleri yönetme, Git ve modelini kullanın dalları o zaman.
Bu yazı ben bazı projelerim kullanılan geliştirme modeli mevcut (gibi belirli çalışma) hakkında 1 yıl önce, ve bu çok başarılı olmuştur. Ben bu konuda yazmak istedim uzun bir zaman oldu, Ama asla bir zamanlama kullanılabilir bulundu, defa. Proje detayları tartışmak için gitmiyorum, Sadece stratejileri hakkında dalları ve yönetimi bültenleri.
Bu model sadece üzerinde duruluyor Git bizim kaynak kodu sürüm oluşturma için bir araç olarak. (Bu arada, Sen Git ilgilenen varsa, Firmamız GitPrime sağlar, gerçek zamanlı olarak, bazı şaşırtıcı veri analizleri optimizasyonu yazılım mühendisliği için)
Artılarını ve eksilerini Git Merkezi kaynak kodu denetim sistemlerine göre ayrıntılı bir tartışma için, bkz: , Web. Muazzam bir şey “savaş” Bu. Bir geliştirici olarak, Diğer mevcut araçları ile ilgili olarak bugün Git tercih ederim. Git şüphesiz geliştiriciler yapmayı tarzını değiştirdi bir Birleştirme veya oluşturmak bir Şube. Klasik dünyasından gel CVS/Subversion, nerede Birleştirme/dallanma Bir şey sadece bir kez yapmak ve her zaman biraz korkutucu görünüyor (“Çatışmalar dikkat Birleştirme, Sizi ısırırlar!”).
Git ile bu eylemleri [Birleştirme/dallanma] son derece basittir ve temsil bizim iş rutin büyük kısmı, Yemin ederim. Örneğin, içinde Kitap CSV/Subversion, dallanma ve Birleştirme daha sonra bölümler yalnızca ilk kez kaplıdır (ileri düzey kullanıcılar için), Herhangi bir süre Git kitap, Bu bölümde görülen 3 (temel bilgiler).
Sadelik ve tekrarlayan doğa sonucu olarak, dallanma ve Birleştirme Artık korkulacak bir şey değildir. Aslında, sürüm denetim araçları yapmak yardımcı olacaktırBirleştirme ve oluşturmak Şube Her şeyden çok.
Başka konuşma yok, Geliştirme modeli gidelim. Burada sunacağım modeli aslında her takım üyesi için bir yönetilen yazılım geliştirme süreci ulaşmak için izlemeniz gereken işlemler bir dizi başka bir şey değildir.
Adem-i merkeziyetçi, Ama merkezli
Biz kullanımı ve o inşaat peki bu model ile depo yapılandırma dallanma Merkezi bir depo oluşmaktadır. Bu havuzda sadece olduğunu unutmayın “olarak kabul” Merkez (Git bir DVCS olduğundan [Dağıtılmış sürüm kontrol sistemleri], IE, Teknik düzeyde bir merkezi depo gibi hiçbir şey yoktur). Biz bu depo olarak referans Köken, Bu ad tüm Git kullanıcılara tanıdık olduğu için.
Her geliştirici yapar çeker ve seyahat için Köken. Ama ilişki ötesinde itme-çekme Merkezi için [Köken], her geliştirici de alabilirsiniz [Çekme] diğer çift alt takım forma değişiklikleri. Örneğin, Bu yeni fonksiyonellik iki veya daha fazla gelişmiş ile çalışmak için yararlı olabilir, daha önce gönderme [itme] devam eden çalışma için Köken. Yukarıdaki şekil, Ayten ve Buğra alt takımlar vardır, Alice ve David, ve Clair ve David.
Teknik olarak, Bu bir şey ifade etmiyor daha fazla Alice Bob isminde bir uzak Git tanımladığı, Bob deposuna işaret, ve tersi.
Arka planda, Bu model gelişimi oldukça varolan modeller esinlenmiştir. Merkezi depo iki dalı vardır [dalları] sonsuz bir hayat ile büyük:
, Şube Yöneticisi içinde Köken her kullanıcıya Git tanımanız gerekir. Paralel Şube Yöneticisi, Başka bir Şube adı geliştirmek.
Biz düşünün menşe/master ana dal olarak nerede kaynak kodu KAFA her zaman bir durumunu gösterir üretime hazır [üretim için hazır].
Biz düşünün menşe/geliştirmek varlık olarak Şube Ana nerede kaynak kodu KAFA her zaman bir sonraki sürümde teslim edilecek en son değişikliklerle bir durumunu gösterir. Bazıları buna derim “Şube entegrasyon”. Bu nerede daha kötü yapılar oldu.
Ne zaman kaynak kodu Şube geliştirmek istikrarlı bir nokta ve var olmak serbest bırakmak hazır ulaşmak [serbest bırakmak], tüm değişiklikleri birleştirilmiş [birleştirilmiş] başa Şube Yöneticisi ve bir sürüm numarasına sahip olarak işaretlenmiş [Yayın]. Bu ayrıntılı olarak nasıl yapılır, daha sonra ele alınacak.
Yani, her değişiklikte dahil edilmiştir [birleştirilmiş] başa Master, Yeni bir sürümünü üretti [serbest bırakmak], tanımı gereği. Bu konuda oldukça titiz olmak istiyoruz, Yani, Teorik olarak, Biz bile bir komut dosyası kullanabilirsiniz kanca Git oluşturmak ve her ne zaman var bizim uygulama üretim sunucularına otomatik olarak göndermek için bir Tamamlama içinde Master.
Yanında dalları Ana, Master ve geliştirmek, bizim kalkınma modeli çeşitli kullanır dalları ekip üyeleri arasında eşzamanlı gelişimini desteklemek amacıyla, Ne 1) yeni özelliklerin izleme kolaylaştırır [özellikleri], 2) yeni bir sürümünü teslim edilmek üzere hazırlamak [Yayın] ve 3) hızlı bir şekilde üretim kusurları düzeltmek için yardımcı olur [düzeltme]. Aksine dalları Ana, Bu dalları kısa bir yaşam süresi, sonunda Şimdi bu kaldırılacak.
Farklı türleri dalları [yardımcıları] Biz-ebilmek kullanma, çoğu:
Bunların her biri dalları belirli bir amacı vardır ve katı kurallara bağlı, Böylece, dalları için çıkmasına neden olabilir Şube ve bu dalları birleştirilmesi gereken [birleştirilmiş] hedeflerinizi. Her göreceksiniz [dalları] bir anda.
Teknik bir bakış açısı altında, Bu dalları kabul edilmez “Özel”. Her tür Şube Nasıl onları kullanmak göre kategorilere ayrılır.. Yine de, Sadece basit dalları iyi eski Git.
[Özellikler Özellikler/işlevi =]
– Şube [Şube] Kaynak:
– Birleştirmeniz gerekir-Eğer [Birleştirme] tekrar:
– Adlandırma kuralı Şube:
Bir şey, dışında Master, geliştirmek, Yayın-*, veya düzeltme-*
, şekil şube (ya da bazen denilen Konu dalları) yeni özellikler/işlevsellik sonraki veya gelecekteki bir sürümüne geliştirmek için kullanılan. Gelişimi başlatmak için bir özelliği, Bu özellik katıştırılır hedef sürüm de bu noktada bilinmeyen olabilir.
Özünü bir şekil şube O sırada özelliği gelişme içinde, Ama sonunda gömülü olacak [birleştirilmiş] başa geliştirmek (Yeni eklemek için özelliği Sonraki Yayın) ya da atılmış (başarısız bir deneyim olması durumunda).
Şekil şube tipik olarak sadece depo içinde gerçekleşir geliştirmek, değil Köken.
Dalları bir özellik oluşturma
$ Git çıkış -b myfeature geliştirmek
$ Git çıkış-b myfeature geliştirmek # Switched to a new branch "myfeature"
Bir özellik ekleme geliştirme sona erdi
Özellikleri kesinleşmiş birleştirilebilir[birleştirilmiş] ile Şube geliştirmek Onları diğerine eklemek için Yayın.
$ Git çıkış geliştirmek
# Şube 'geliştirmek için' geçiş
$ Git birleştirme --içinde-FF myfeature
# Ea1b82a güncelleştiriliyor... 05e9557
# (Değişikliklerin Özeti)
# $ Git şube-d myfeature
# Silinen şube myfeature (05e9557 yapıldı.).
$ Git push kökenli geliştirmek
$ Git çıkış geliştirmek # Şube 'geliştirmek için' geçiş $ Git birleştirme--no-ff myfeature # Ea1b82a güncelleştiriliyor... 05e9557 # (Değişikliklerin Özeti) # $ Git şube-d myfeature # Silinen şube myfeature (05e9557 yapıldı.). $ Git push kökenli geliştirmek
Bayrak –Hayır-ff birleştirmeyi neden olur [Birleştirme] her zaman yeni bir nesne oluştur Tamamlama, Birleştirme ile yerine olabilir, ancak bir Hızlı ileri sarma [FF]. Bu varlığı tarihi hakkında kayıp bilgileri engeller bir şekil şube, tüm gruplandırma tamamlar için eklenmiştir özelliği. Karşılaştır:
İkinci durumda [Yukarıdaki şekil], Git geçmişinden görmek imkansız olan tamamlar içinde uygulanan bir özelliği; el ile tüm günlük iletileri okumak gerekir. Ters bir özelliği tek parça (IE, bir grup tamamlar), Son durumda gerçek bir baş ağrısı olduğunu, Bu kolay eğer yapılır iken bayrak –Hayır-ff kullanılmıştır.
Evet, Bu bir kaç daha fazla nesneleri oluşturur tamamlar (boş), Ama kazanç daha maliyeti çok daha büyüktür.
[Yayın yayın/teslimat/sürüm =]
geliştirmek ve Master
, Bültenleri dalları yeni bir üretim sürüm hazırlanmasında yardımcı olmak [üretim sürümü]. Son bir saat i'ye nokta sağlar. Ayrıca, Onlar küçük hata düzeltmeleri sağlar hata bildirimi ve tanımı meta veri için bir Yayın (sürüm numarası, tarihler kurmak, vb). Tüm bu işi yapmak için bir serbest bırakmak dal, , Şube geliştirmek almak için temiz kalmak özellikleri sonraki büyük Yayın [Sürüm].
Yeni bir oluşturmak için anahtar an serbest bırakmak dal bir dallanma geliştirmek zaman geliştirmek zaten (Neredeyse) yeni istenen durumunu yansıtan Yayın [Sürüm]. Tüm özellikleri adaylar için Yayın Oluşturulacak yansıtılması [Birleştirme] , geliştirmek Bu anda. Zaten özellikleri karşı karşıya bültenleri gelecek bir sonraki beklemelisiniz Yayın [Sürüm].
Tam olarak, başında olduğu bir serbest bırakmak dal Bu sonraki Yayın sürüm numarasını alır – daha önce değil. O zamana kadar, , Şube geliştirmek değişikliklerin yansımasını “bir sonraki sürümü” [sonraki sürümü], Ama emin değilim Eğer bu “sonraki sürümü” sonunda olacak 0.3 veya 1.0, kadar serbest bırakmak dal başlatılır. Bu karar, başında yapılır serbest bırakmak dal ve sürüm oluşturma projede kuralları tarafından gerçekleştirilen [Görmek öneririz “Anlamsal sürüm oluşturma“].
Serbest bırakmak dal oluşturma
, Bültenleri dalları oluşturulur Şube geliştirmek. Örneğin, Diyelim ki sürüm 1.1.5 geçerli üretim sürümü ve biz büyük bir Yayın geliyor. Durumunu geliştirmek Senin için hazır “sonraki sürümü” [bir sonraki sürümü] ve karar verdik bu sürümü olacak 1.2 (Onun yerine 1.1.6 veya 2.0). Yani, Biz genişlettik ve vermek serbest bırakmak dal Yeni sürüm numarası yansıtan bir ad:
$ Git çıkış -(b) yayın-1.2 geliştirmek
$ ./yumru-Sürüm.sh 1.2
# Başarıyla değiştirildi dosyalar, sürüm bumped 1.2.
$ Git tamamlama -, -m "Bumped version number to 1.2"
# [Sürüm 1.2 74d 9424] Çağırırdık sürüm numarası 1.2
# 1 değiştirildi dosyalar, 1 eklemeler(+), 1 silme(-)
$ Git çıkış-b yayın-1.2 geliştirmek # Switched to a new branch "release-1.2" $ ./Bump-version.sh 1.2 # Başarıyla değiştirildi dosyalar, sürüm bumped 1.2. $ git commit -a -m "Bumped version number to 1.2" # [Sürüm 1.2 74d 9424] Çağırırdık sürüm numarası 1.2 # 1 değiştirildi dosyalar, 1 eklemeler(+), 1 silme(-)
Yeni bir oluşturduktan sonra Şube ve erişim, Biz sürüm numarası. Burada, Bump-version.sh belgili tanımlık yeni yorum yansıtacak şekilde çalışma kopyasından bazı dosyaları değiştirir bir kabuk yazısıdır. (Bu can, Elbette, el ile değişiklik olması – bazı dosyaları değiştirmek noktasıdır.) Yani, yapılır Tamamlama anlam değiştirici yorum sayısı.
Bu yeni Şube Orada-ebilmek var olmak orada bir süre için, kadar Yayın Kesinlikle atılmış olması. Bu dönemde, hata düzeltmeleri bu uygulanabilir Şube (yerine Şube geliştirmek). Ayrıca yeni ve büyük özellikleri Burada kesinlikle yasaktir. Onlar birleştirilmelidir [birleştirilmiş] içinde geliştirmek ve, Böyle, gelecek için beklemek büyük Yayın.
Serbest bırakmak dal sonuçlandırılması
Ne zaman serbest bırakmak dal gerçek bir yorum olmaya hazır mısın, bazı eylemler gerçekleştirilmesi gereken. İlk, , serbest bırakmak dal içine birleştirilir Master (Her Tamamlama içinde Master tanımı gereği yeni bir sürümüdür, Hatırlıyorum). O zaman, Bu Tamamlama içinde Master kolay ilerisi için bu sürüm geçmişi işaretlenmelidir. Son olarak, yapılan değişiklikler serbest bırakmak dal birleştirilmesi gerekiyor [birleştirilmiş] tekrar geliştirmek, Böylece bültenleri geleceği de bu hata düzeltmeleri içerir.
Git ilk iki adımda:
$ Git kontrol ana
# Şube 'master' açık
$ Git birleştirme --içinde-FF yayın-1.2
# Özyinelemeli tarafından yapılan birleştirme.
$ Git etiketi -, 1.2
$ Git kontrol ana # Şube 'master' açık $ Git birleştirme--no-ff yayın-1.2 # Özyinelemeli tarafından yapılan birleştirme. # (Değişikliklerin Özeti) $ Git etiket- 1.2
, Yayın Şimdi tamamlanmış ve için işaretlenmiş ileride olduğunu.
Not: Sen-ebilmek da kullanma bayrakları-s veya-u etiketinizin şifreli olarak imzalamak için.
Yapılan değişiklikleri tutmak için serbest bırakmak dal, Biz onları koymak gerekir geri geliştirmek. Git:
$ Git çıkış geliştirmek # Şube 'geliştirmek için' geçiş $ Git birleştirme--no-ff yayın-1.2 # Özyinelemeli tarafından yapılan birleştirme. # (Değişikliklerin Özeti)
Bu adım bir birleştirme çakışmaya neden olabilir (Muhtemelen gitmek, Bir kez biz sürüm numarası değişti). Eğer öyleyse, düzeltmek ve yapmak Tamamlama.
Şimdi, Bu gerçekten ayrıldı, , serbest bırakmak dal Kaldırılabilir, Beri artık gerek yok:
$ Git şube -d yayın-1.2
# Silinen şube yayın-1.2 (ff452fe yapıldı.).
$ Git şube-d yayın-1.2 # Silinen şube yayın-1.2 (ff452fe yapıldı.).
, Düzeltme dalları çok benzer Yayın dalları, Onlar da yeni bir üretim sürümü hazırlamak amacıyla, Her ne kadar planlanan değildir. Sonra hemen istenmeyen bir devlet üretim versiyonları hareket gerek kaynaklanan [kullanımda]. Önemli bir hata olduğunda bir üretim sürüm, hemen çözülmesi gerekir, o zaman bir düzeltme şube varolan ürün sürümü işaretler etiketi üzerinden elde edilebilir Ana dal.
Özü bu ekip üyelerinin işi (içinde Şube geliştirmek) devam edebilirsiniz, başka bir kişi kusur üretimde hızlı bir düzeltme hazırlanıyor iken.
Düzeltme şube oluşturma
, düzeltme dalları oluşturulur Ana dal. Örneğin, belgili tanımlık yorum varsayarak 1.2 çalışan geçerli üretim sürüm ve sorunları önemli bir hata nedeniyle sunar. Değişiklikler geliştirmek hala kararsız bırakın. Sonra şube bir düzeltme şube ve sorunu çözmek başlar:
$ Git çıkış -(b) düzeltme-1.2.1 Master
$ ./yumru-Sürüm.sh 1.2.1
# Başarıyla değiştirildi dosyalar, sürüm bumped 1.2.1.
$ Git tamamlama -, -m "Bumped version number to 1.2.1"
# [Düzeltme-1.2.1 41e61bb] Çağırırdık sürüm numarası 1.2.1
$ Git çıkış-b düzeltme-1.2.1 master # Switched to a new branch "hotfix-1.2.1" $ ./Bump-version.sh 1.2.1 # Başarıyla değiştirildi dosyalar, sürüm bumped 1.2.1. $ git commit -a -m "Bumped version number to 1.2.1" # [Düzeltme-1.2.1 41e61bb] Çağırırdık sürüm numarası 1.2.1 # 1 değiştirildi dosyalar, 1 eklemeler(+), 1 silme(-)
Dallanma sonra sürüm numarasını değiştirmeyi unutma!
O zaman, hatayı düzeltin ve yapmak Tamamlama bir veya birden fazla düzeltme Tamamlama ayrılmış.
$ Git tamamlama -m "Fixed severe production problem"
# [Düzeltme-1.2.1 abbe5d6] Sabit ciddi üretim sorunu
# 5 değiştirildi dosyalar, 32 eklemeler(+), 17 silme(-)
$ git commit -m "Fixed severe production problem" # [Düzeltme-1.2.1 abbe5d6] Sabit ciddi üretim sorunu # 5 değiştirildi dosyalar, 32 eklemeler(+), 17 silme(-)
Bir düzeltme şube bitirme
Ne zaman tamamlanmak, , Bugfix başa birleştirilmesi gerekiyor Master, Ama bu da tekrar için yansıtılması gerekiyor geliştirmek, Bunu sağlamak için Bugfix sonraki sürümde de dahil. Bu nasıl için oldukça benzer olduğunu Yayın dalları kesinleşmiş.
İlk, güncelleştirmek Master ve tag Yayın [Yaz seçin]:
$ Git birleştirme --içinde-FF düzeltme-1.2.1
$ Git etiketi -, 1.2.1
$ Git kontrol ana # Şube 'master' açık $ Git birleştirme--no-ff düzeltme-1.2.1 # Özyinelemeli tarafından yapılan birleştirme. # (Değişikliklerin Özeti) $ Git etiket- 1.2.1
O zaman, dahil Bugfix içinde geliştirmek Ayrıca:
$ Git çıkış geliştirmek # Şube 'geliştirmek için' geçiş $ Git birleştirme--no-ff düzeltme-1.2.1 # Özyinelemeli tarafından yapılan birleştirme. # (Değişikliklerin Özeti)
Bu kuralın tek istisnası, Olduğunda bir serbest bırakmak dal devam eden, değişiklikleri düzeltme Bunun için birleştirilmesi gerekiyor serbest bırakmak dal, Onun yerine geliştirmek. Birleştirme Bugfix içinde serbest bırakmak dal neden olur Bugfix içine birleştirilir geliştirmek Ayrıca, Ne zaman serbest bırakmak dal tamamlar. (Eğer çalışmalarında geliştirmek hemen gerektiren Bugfix ve cant'beklemek-e kadar serbest bırakmak dal tamamlandı, Güvenli bir şekilde birleştirebilirsiniz Bugfix için deveolp çok.)
Son olarak, Kaldır Şube geçici:
$ Git şube -d düzeltme-1.2.1
# Silinen şube düzeltme-1.2.1 (abbe5d6 yapıldı.).
$ Git şube-d düzeltme-1.2.1 # Silinen şube düzeltme-1.2.1 (abbe5d6 yapıldı.).
Dallanma bu modelde gerçekten olağanüstü bir şey olsa, yazının başında hatlarıma projelerimizde çok yararlı olabilir. O bir zihinsel model anlamak kolay gösterir ve süreçleri ortak bir anlayış geliştirmek ekip üyeleri verir dallanma ve serbest bırakma.
Yüksek kaliteli PDF yorum-in şekil orijinal post blog sağlanır: http://nvie.com/posts/a-successful-git-branching-model/ [ya da belgili tanımlık Download bağlantı aşağı]. Devam edin ve her zaman hızlı başvuru için duvara koy.
1 dosya(s) 3.89 MB
Toplam sayısı: 7114
25 Ağustos 2017 Taylor Lee	Şube, geliştirmek, Git, Master, Birleştirme, modeli, Yayın
Bir yorum “Git dallarında başarılı bir model”
Deivson Doğum dedi:
İyi günler, Git başlangıçta Linux sistemi tarafından ama taşınabilirliği konuşurken geliştirilmiştir biliyorum, Git windows ve POSIX MSI'LERİNİ çalışır merak ediyorum??
21 Ekim 2018 at 14:01
Başka bir ülkeden Kaspersky anahtar harekete geçirmek (Bölge) Bu soruna geçici bir çözüm için olası bir çözümdür "Harekete geçirmek şifre bu bölge için geçersiz", Bir kısıtlama belirli anahtarlar yalnızca belirli bölgelerden kullanılabilir olduğundan (ülkeler). Problema Quem fe...
Taylor Lee, diyor ki: Dosya gönderinin başında indirebilirsiniz: ipdetails-20121116.zip
Taylor Lee, diyor ki: Hangi makine, Debian VM? Ctrl+Alt+F1'i dener, kök olarak oturum açma. İzinleri veya dosya/dizin sahiplerini denetleme: ls -la /home/Kullanıcı. KULLANICI'nın aslında sahip olup olmadığını görün, Aksi takdirde, Deneyin: sudo chown -R Kullanıcı:Kullanıcı /h....
Edivaldo ilçesi, diyor ki: Merhaba, Büyük öğretici. Her şey doğru çalıştı. Tebrikler!
Jarbas Santos, diyor ki: Eyvallah pek için belgili tanımlık uç!
LUIZ GUSTAVO MENDES , diyor ki: Günaydın. Büyük yazı, ancak ben canlı fiber kullanmak ve köprü modu koyarsanız ben telefon hattı ve modem uzaktan destek kapatın. Başka türlü nasıl yapılacağını biliyorsun.? Minnettar
Gabriela dos Reis Si, diyor ki: Soooi bu son komutu verdikten sonra makinemin artık başlamadığını görüyor. Yeni -den başlatılması, ama ben girmek için benim kullanıcı ve şifre yazdığım zaman siyah bir ekran açılır (sanki gelecekti) ve geri aynı ekrana kullanıcı ve şifre helppp girmek için ....
Goiânia Makyaj, diyor ki: Tüm oldukça iyi içerik. İnsanlığa bu şekilde bu kadar çok bilgi verdiğiniz için teşekkür ederiz.. Ben sevdim.
Amanda Teixeira, diyor ki: Claudio Ben yerellik tarafından ücretsiz nakliye vermek mümkün değilim, Posta kodlarını iyi koydum ve fonksiyon sepete girmiyor, bana bir ışık verebilir?
Marcio, diyor ki: Ben class.ipdetails.php dosyası yok, iyilik için buraya gönderebilirsiniz olacak ?
Silvio, diyor ki: İpucu için teşekkürler, çok yardımcı oldu
Telif hakkı © 2020 taylorlopes.com Ekim beri 2012, 2.216.328 sayısı