Kaynak kontrolü için ilk taahhüdümü ne zaman yapmalıyım?


118

Bir projenin ilk önce kaynak kontrolünü üstlenmeye yetecek kadar uzakta olduğundan asla emin değilim. Proje “çerçeve tamamlanana” kadar taahhütte bulunma eğilimindeyim ve öncelikli olarak bundan sonra özellikler taahhüt ediyorum. (Bunun için çok büyük bir çekirdek çerçeveye sahip olacak kadar büyük kişisel projeler yapmadım.) Bunun neyin yanlış gidebileceğinden emin olmasam da, bunun en iyi uygulama olmadığını hissediyorum.

Örneğin, tek bir kod dosyasından oluşan bir projem var diyelim. Projenin son derece temel işlevsellik (1 veya 2 özellik) ile çalışmasını sağlamak için yaklaşık 10 satır boyler kod kodu ve 100 satır alacaktır. İlk önce check-in yapmalı mıyım:

  1. Boş dosya?
  2. Kazan kodu?
  3. İlk özellikler?
  4. Başka bir noktada mı?

Ayrıca, belirli bir noktada check-in yaptırmanın nedenleri nelerdir?


10
eve gitmeden önce kendi çalışma dalınıza bağlı olursunuz.
Reactgular

59
İlk taahhüt her zaman bir Sourceforge projesi oluşturduktan, bir web sitesi oluşturduktan, posta listesini yapılandırdıktan ve proje hakkında birkaç yıl boyunca blog yazdıktan sonra yapılmalıdır. :)
Kaz

15
Çok erken veya sık taahhütte bulunmanın olumsuz tarafı nedir?
Isaac Rabinovitch

13
mkdir myproj; cd myproj; git init; işe başlamak.
Eddie B

10
Video oyunlarındaki hızlı kaydetme düğmesinden ilerleme tasarrufunun nasıl yönetileceğini öğrendim. Kural şöyle bir şeye gider: Will I mind having to redo that part ? Save : SaveAnyway;Kaynak kontrolü için aynı yaklaşımı benimsem, bir şeyin çalışmasını beklemiyorum ya da yakınlarda bir yerde olmak için beklemiyorum, sadece bir şey bulana ya da istemediğim kadar değişiklik yapana kadar beklerim Bunu tekrar çözmeyi denemek ya da bu değişiklikleri tekrar yapmak zorunda kaldım, sonra kontrol ediyorum. Bu yüzden insanlar proje yarattıktan sonra tasarruf etmeyi öneriyor; Projeler oluşturmak can sıkıcıdır, check-in yapın, kesinlikle bir daha yapmak zorunda kalmazsınız.
Jimmy Hoffa

Yanıtlar:


103

Mantıklı bir "ünite" hazırladığın anda tamamlamalısın.

Birim nedir? Bu ne yaptığınıza bağlıdır; Örneğin, bir Visual Studio projesi oluşturuyorsanız, içinde herhangi bir şey olmasa bile, oluşturulduktan hemen sonra çözümü yapın.

Oradan mümkün olduğunca sık taahhüt sağlamaya devam edin, ancak yine de yalnızca tamamlanmış “birimler” (ör. Sınıflar, yapılandırmalar, vb.) Taahhüt edin; böyle bir şey ters giderse hayatınızı kolaylaştıracak (küçük bir değişiklik kümesini geri alabilirsiniz) ve çatışma olasılığını azaltacaktır.


27
Sürekli olarak bir iş koluna çok yakın bir şekilde iş veriyorum ve o şubeyi ana birimde birimler halinde birleştiriyorum. Her iki dünyanın da en iyisini verir, ana hattın geri döndürülecek küçük değişiklik kümeleri olan birimlerden oluşmasıdır, ancak konu dalı bir kerede biraz yedeklenmeme izin verebilir.
Jeff Ferland

16
Bir taahhüt asla çok küçük değildir! Değişikliklerinizi yerine getirmekten kaçının!
Leonardo Herrera

1
İş akışınıza ve işinizin yapılması için deponuzla ilgilenen kaç kişiye bağlı olarak, birçok küçük, sık sık taahhüt için +1 diyebilirim. Git'in geçmişi yeniden yazma yeteneği, böylece bu 15 sözün yerine geçmesi bu konuda FooSerializeryardımcı olmadan önce bir şey haline gelebilir.
Tim Post

1
@loldop: Bu kullandığınız sürüm kontrol yazılımına bağlıdır. Diyelim ki Git'i kullanıyorsunuz: Yaptıklarınızı saklayabilir , düzeltmeleri yapabilir, taahhüt edebilir, saklanan değişiklikleri yeniden uygulayabilir ve üzerinde çalışmaya yeniden başlayabilirsiniz. Subversion'da, başka bir klasördeki depoyu başka bir ödeme yapabilir, hatayı düzeltebilir ve yeniden depolamayı etkilemeden oradaki depoya işleyebilirsiniz. Veya bir yama dosyası oluşturun, düzenlemenizi geri alın, hatayı düzeltin, onaylayın, düzeltme ekini yeniden uygulayın. Bunu yapmanın birçok yolu var.
Albireo

1
Belki de 2., 3. işleme vs. için iyi bir cevaptır. Fakat ilk önce boş olmalıdır.
Felipe

143

İlgilendiğim kadarıyla, kaynak kontrol deponuz temel proje kurulumunun bir parçası, bu yüzden boş projemi oluşturduktan hemen sonra taahhüt ediyorum.


29
Erken taahhüt, sık taahhüt.
Leonardo Herrera

11
Buna kabul edilen cevaptan daha fazla katılıyorum. Aynı zamanda kaynak kontrolünü de (DVCS demek) büyük bir geri alma düğmesi olarak görüyorum. Ayrıca, semver (etiketli) kullanmanızı ve 0: 15
Antony Scott

2
Thanks @AntonyScott Kabul edilen cevaba% 100 katılıyorum, ancak bunu yazarken, kaynak kontrolünü ve neden nasıl yönettiğime dair 1500 kelimelik bir yazı ile suları çamurlama vizyonuna sahip oldum. Bu yüzden basit ve konuya devam etmeye karar verdim.
John MacIntyre

2
Evet, +1. Boş bir işlem hakkında kendinizi kötü hissederseniz, Xion'un başka bir cevabında yazdığı gibi .gitignore (veya eşdeğeri) ile başlayın [ programmers.stackexchange.com/a/176845/5405] . Bu çok doğal bir ilk taahhüt.
Hanno Fietz 23:12

Sorunun "uzun cevaplar" bayrağını fark ettim ve yardım edemem ama bunun bu cevabı işaret ettiğini düşünüyorum. AFAIC Ben 'neden?' "kaynak kontrol deposu temel proje kurulumunun bir parçası" sorusuyla cevap. Dediğim gibi, kaynak kontrolünü nasıl kullandığımla ilgili tüm felsefeme ilişkin bir makale yazabilirim, ancak bu sadece bu cevabı bozacaktır. Cevabımla ilgili kesin bir sorusu olan varsa, cevaplamaktan mutlu olurum, ama aksi halde bu cevabı verhoke uğruna kabartmak istemiyorum. Silmek istiyorsanız, devam edin.
John MacIntyre

77

Dün

... alternatif olarak, eğer zaman yolculuğu yapamıyorsanız ...
(belki de arabanız 88mph'ye ulaşamaz veya akı kapasitörünüz kapandı)

şimdi

Kanlı noktada yeni projeler yapılmalı, bu delilik olmamalı ve çağdaş DVCS sistemleri taahhütleri önlemek için mümkün olan her mazereti kaldırmıştır : git init . ; git add * ; git commit -m initial-commitşimdi olduğu gibi çok geç olmadan.

Bir daha mantıklı, tartışılabilir, soru olabilirdi: "Ben ne zaman birleştirme bir benim kaydedilmesini paylaşılan bir kaynak denetimi ekibinin yönetilen bir de depo kurulan proje?" (sıfatların, sıfatların önemli olduğuna dikkat edin) Ve diğer cevapların çoğunun aslında buna cevap vermeye çalıştığını hissediyorum.

Kişisel şubeniz yatmadan önce en az günde bir kez , deli gibi davranmaya karar vermelidir . Ertesi sabah kalkıp, önceki gece ne yaptığınız hakkında hiçbir fikriniz olmadığını görebilirsiniz. VCS sizi bununla örtmeli ve güzel bir şekilde derlenen, sorunsuz çalışan ve / veya testleri geçen çok yeni bir alt sürümüne geri dönme fırsatına sahip olmak en iyi seçeneğiniz olabilir.


3
Özellikle günün sonunda derlenmeyen değişiklikler yapmayı umursamıyorum. Ertesi gün derlemeyecek bir şeyiniz var ama yine de kesin geçmişiniz var - geçmişinizin "kirli" olmasını istemiyorsanız, her iyi DVCS'de geri alma için seçenekler var (bence hepimiz DVCS'nin tek yol olduğuna inanıyoruz) git.)
Leonardo Herrera

@LeonardoHerrera POV'unuzu anlıyorum, ancak birden fazla giriş noktası olan yorumlanmış dil projelerinde, derleyici olmayan bir şubeyi meşru sebeplerle (farklı bir giriş noktasında hata düzeltmelerini paylaşmak gibi) taahhüt etmiş olursunuz. ama sonra sorta bir zevk meselesi haline gelir ... ve degil gibibus est est disputandum .
ZJR

20

En kısa sürede taahhütte bulunacağımı söyleyebilirim. Kaynak kontrolünün temel amacı, bir şeyler ters gittiğinde geri dönmenize izin vermektir ve bu "erken ve sık davran" uygulamasıyla yankılanır.

Şahsen ilk işim tipik olarak Python kodu için * .py [co] gibi gerekli olacak birkaç filtreye sahip sadece .gitignore dosyasını (ya da eşdeğeri) içeriyor . Temel proje kurulumu ve / veya ilk basit prototip, genellikle aşağıdaki gibidir.


Benzer bir şey yapıyorum. GitHub'ı kullandığımdan beri her zaman temel bir README dosyasına sahibim, hatta projenin adını içeriyor. Bulunduğum dosyadan get-go uygulamasına sahip olduğumu ileride güncelleyeceğimden çok daha büyük olasılıkla buluyorum :).
Tikhon Jelvis

16

İlk taahhüt, projenin bir satır özeti kadar az bir README dosyası veya projenin ilk dönüm noktası hakkında yeterli bilgi olabilir. Geniş konular şunları da içerebilir:

  • Giriş
  • Proje Açıklaması
  • Proje yapısı
  • Kodlama kuralları
  • Nasıl yapılır hakkında talimatlar:
    • inşa etmek
    • Ölçek
    • dağıtmak
  • Bilinen sorunlar ve geçici çözümler
  • yapılacaklar listesi
  • Kullanım Şartları

Bir projede değişiklik yapmadan önce README'yi güncelleme uygulaması, ayrıca Benioku Tarafından Geliştirilen Geliştirme olarak da adlandırılır ve bu değişiklikleri yapmaya zaman ayırmadan önce değişiklikleri düşünmenizi sağlar.

Bu yazılıma katkıda bulunmak veya kullanmak isteyen herkes README ile başlayacaktır.


12

Kaybetmek istemeyeceğiniz bir iş yaptıysanız, kaynak kontrol sisteminizde olması gerekir.

Bu kesinlikle Git gibi dağıtılmış sistemler için geçerlidir. Merkezi bir sistem kullanıyorsanız ve bir şeyi kontrol etmenin tek yolu onu herkesin görmesini sağlamak , uzak durmak isteyebilirsiniz - veya kendi yerel git deponuzu kurmayı ve merkezileştirmeyi düşünebilirsiniz. Hazır olduğunuzda sistem.


3
Benim kuralım bu, ayrıca “kodun derlendiği bir zaman noktası” olmasını da istediğim gibi. Bir şeyi kırdığın zaman bulmak zorunda kalırsan, derleme ve parçalama yapmanın daha fazla sinir bozucu olacağını kabul et.
Warren P,

Geçici bir şube, en azından git için, bu adresi ele almaz mıydı? Ben git bisectfazla kullanmadım.
Keith Thompson,

Mercurial'ı yeniden ödemesiz kullanıyorum, bu yüzden tüm taahhütleri kalıcı olarak kabul ediyorum
Warren P

7

Temel kuralım, boş bir kaç dosya içermesine rağmen, çözüm dosyamın (veya başka bir derleme betiğinin) yapılmasından sonra teslim etmektir. Projede birden fazla kişinin çalıştığı durumlar için iyi bir uygulamadır. Bu dosya başlangıçta en kötü birleştirme sorunlarına sahip olma eğilimindedir, çünkü insanlar projeye bir şeyler eklerler, bu nedenle ihtiyaçlar erken ve sık yapılmalıdır.

Projede çalışan tek kişi olsanız ve yalnızca bir dosya olsa bile, aynı iş akışını takip etmeyi ve eldeki sorun için düşünmeyi kaydetmeyi daha kolay buluyorum.


6

Bahsetti mi emin değilim .

Ancak yaptığınız şeyin kaçtığından / derlendiğinden emin olun ! Yani sözdizimi hatası yok.

Bozuk ödeme kodundan daha sinir bozucu bir şey yok.


gerçekten, mantıklı!
Kova_Girl

Katılmıyorum. Eğer kod işlemek istediğimde derlenmezse, işlem mesajında ​​bir yere WIP yazarım. O zaman derleyen en son sürüme ihtiyaç duyduğumda bu taahhütleri görmezden gelebilirim.
Minthos

5

Yazılım testi (TDD yaklaşımı) ile ilgili diğer bakış açıları, yeni test durumları yeşil olduğunda en kısa sürede size yardımcı olacaktır. Bu, tamamlanmış yeni bir kod birimine sahip olacağınız anlamına gelir.


Bir yöntemi ele almak için (çoğunlukla) bunun için birkaç birim testine ihtiyacınız olabilir. Eğer bir sınavdan geçerseniz, bu bir iş birimini bitirdiğiniz anlamına gelir. Bu yöntemi bitirmenin bir iş birimi olduğunu söylemek bile doğru değil.
Behnam Rasooli,

5

Aptalca bir şey yapmadan hemen önce.

Büyülü güçleri olmayanlar için, bu çok az ve sık demek.

Tek başına çalışıyorsanız, bir içki içtiğinizde veya her neyse bunu yapın.

Eğer bir takımda çalışıyorsanız, muhtemelen işin derlendiğinden emin olmanız gerekir, böylece başka biri en son alırsa, bir hata torbası alamazlar. Ama bunun dışında, olabildiğince.


4

Projeye yaklaşık 2 ~ 3 saat.

Sadece şaka yapıyorum. Tüm durumlara uyacak tek bir iyi cevap yok. Her şeyden önce, eğer dağıtılmış bir sürüm kontrol sisteminiz varsa (git veya Mercurial gibi), yerel reponuzu kabul etmek, feci bir başarısızlık durumunda verilerinizi korumaz. Ancak, özel bir uzak repo size para kazandırabilir, örneğin github'da. Taahhüt tarihçesini koruyacaksınız, ancak benim deneyimimde projeniz biraz ilerleyene kadar buna ihtiyacınız olmayacak.

Ayrıca, başlangıçta, özellikle dosyaları dolaştırıyorsanız, muhtemelen çok fazla karmaşa istemezsiniz. Değişikliklerin yapılması, yalnızca küçük olması durumunda bir yük olacaktır. Bir şeyi atmaya bile karar verebilirsin. Ancak, çoğaltılması önemsiz olmayan değişiklikleri kaybederseniz, bir yedek kopya oluşturmayı özleyeceksiniz ve sürüm kontrol sistemleri son derece değerli yedekleme sistemleri için çalışıyor.

Günümüzde bazı insanlar kodlarını saklamak için DropBox veya benzeri ürünler kullanıyor. Bir projenin başlangıcında iyi bir uzlaşma olabilir, çünkü kurulum için sıfır çaba harcar. Bununla birlikte, özellikle birkaç kişi aynı anda koda dokunduğunda, ciddi yazılım geliştirmede barbarca bir alışkanlıktır.

Bu yüzden, ne zaman değerli olursa olsun, yani çoğaltmak için önemsiz olmayan bir şeyim olduğunda, sürüm kontrolünü ayarlama eğilimindeyim. Değer özneldir (ve kişinin kapasitelerine bağlıdır), bu yüzden kendi kararınızı vermeniz gerekecektir. Bu noktada, harici bir diske ikinci bir depoyu ya da eğer halka açık bir proje ise github'da saklıyorum, aksi halde ödeme hesabım onu ​​tutacak.


3

Birçok kişi zaten "Hemen" cevabını verdi ve ben% 100 katılıyorum. Ayrıca, Xion'un VCS'nin görmezden gelme biçimleriyle (yani veya eşdeğeri) başlamasını öneriyorum.gitignore .

Sanırım erken kararlar için olumsuz tarafların olmadığı konusunda anlaştık. Eklenti eklemek istiyorum:

  • Atmayı seçtiğiniz şeyleri yapma olasılığınız daha düşüktür, ancak bu hala devam etmektedir. Yeni bir gelişmeye başladığımda, hızlı bir şekilde kod yazacağım ve yayınlayacağım ve daha sonra işleme koyduğumda, bir sürü dosya bulunduğunda, yanlışlıkla yalnızca bir sonraki işlemimde silmek için bir şeyler yaptım. Bu, küçük veya hatta boş taahhütlerin aksine, tarihteki gerçek gürültüdür.
  • Sistematik bir türseniz ve projelerinizde tipik ilk adımlar varsa, taahhüt noktaları olarak sahip olmaları size ya da başkalarına öğretici olabilir ve hatta belirli bir noktada dalma ve yeniden kullanılabilir bir proje saplaması oluşturma fırsatı da sağlayabilir. Bir Maven projesinin oluşturulmasında, bazı küçük ilk adımlar zaten oldukça önemli bir üs tanımlayabilirsiniz çünkü bu (yararlı oldu Maven tabanlı projeler üzerinde çalıştık ve bu adımlar için çok değil iken yapmak , yeterince gerektirebilir düşünme gerektirecek tekrar Kullanılabilirlik).

2

Hangi VCS'yi kullandığınıza bağlı olabilir.

Git ile boş bir klasör (veya neredeyse boş bir README dosyası ile) taahhüt ediyorum. Mesele şu ki, geliştirme sürecinin başındayken baştan başlamak istersem (yukarı akıştan önce) tamamen baştan başlamak istersem geri dönüp şubemi bu boş duruma sıfırlayabilirim. Daha sonra "oluşturulan" dosyalarımı işleme koyardım (örneğin görsel stüdyo çözümü). O zaman gerçekten kodlarken, her bir birimi normalde yaptığınız gibi yapmaya başlayacağım.

SVN ile, her bir taahhüdün üstesinden gelmek için bastırıyorsunuz, böylece Git'le yaptığınız gibi başlama lüksünü gerçekten elde edemiyorsunuz. Bu durumda, sürecin başlarında büyük bir yenileme yapacağınızı düşünüyorsanız, erken bir taahhütte bulunmak yararlı olmayabilir. Bu olsa kodlayan kişiye kalmış olacak.


2

Yeni bir projeye başladığımda genellikle herhangi bir kod eklenmeden önce bunu taahhüt ederek başlıyorum. Her zaman takip ettiğim genel bir kural: Bilgisayarınız tüm verilerinizi kilitleyip sildiyse, hangi kodun bellekten yazmamasını tercih edersiniz. On yıl önce TDD ve daha iyi programlama uygulamalarından önce, hatırlayabildiğim şeyler konusunda oldukça iyimserdim. Şimdi daha temkinli olma eğilimindeyim. Diğer birçok afişin de erken ve çok sık taahhütte bulunduğunu söylediği gibi. Bunu yaparak hiçbir şey kaybetmiyorsunuz.

Çoğu zaman kendi başıma çalışıyorum, bu yüzden itiraf etmeliyim ki gevşeyim ama genelde eve gitmeden önce söz veriyorum. Böylece yarın başaramazsam, meslektaşlarım kaldığım yeri alabilirler.

Şu anda işyerinde Tortoise / SVN kullanıyorum.


2

Hemen boş projeyi tamamla . Projede çalışmak için harcadığınız saatte birkaç kez taahhüt vermeye devam edin. Kod derlenmese bile kabul et. Bu tür taahhütleri takip etmek için taahhüt masajında ​​“WIP” ile işaretlerim.

Ayrıca, manuel olarak işlemeyi unutmam durumunda, tüm projelerimi her 10 dakikada bir otomatik olarak bir yedek depoya aktaran bir komut dosyası var. Buna benim bulut destekli geri alma tamponumu diyelim.

Kodunuzu görmek için ekibinize ihtiyaç duyduğunuzda projeyi bir ekip deposuna iade edin (aka. İtin ). Muhtemelen benim gibi bir şey varsa, kodunuz ekibiniz tarafından görülmeye hazır olmadan önce.

Takımına güzel olmasını istiyorsanız, ezmek takım repo onları iterek önce kaydedilmesini.


1

Tüm makalelere baktım ve bence zaten çok sayıda iyi çözümümüz oldu, ancak metodolojimi sizinle paylaşmak istiyorum.

Çerçeve oluşturma (sıfırdan sağa) üzerinde çalışırken, modül tamamlanana veya sonlandırılana kadar her modül için birçok değişiklik yapılacaktır. Bu yüzden her zaman biri DİNAMİK, diğeri de STATİK olarak adlandırılan 2 konum var. Değişiklikler devam ederken ve çerçeve henüz tamamlanmadığında, DYANMIC lokasyonunda gerçekleştirildi ve tamamlandıktan ve tamamlandıktan sonra bunu STATIC konumuna taşıdım. Bu yüzden tam bir Kaynak Kontrolü var.

Teşekkürler


0

Herhangi bir uygulamada, bileşenleri tasarlamak için biraz zaman harcayacaksınız. Ad alanlarınızı, projelerinizi, dış referanslarınızı, 3. şahıs kütüphanelerinizi vs. kabaca veya tam olarak bilmelisiniz.

Eğer bir takımdaysanız, temel projeyi oluşturmak, bağımlılıkları belirlemek ve seçili olan iskeleti (projenizin temel alacağı temel) yerleştirmek için liderinizi veya kim seçilirse öneriyorum.

Ayrıca, işleminizin sağlam olması için check-in işleminden önce verilen görev, serbest bırakma, bagaj vb. Şubelerinizin olmasını sağlamak istersiniz.

Halen devam etmekte olan bir proje için yeni bir "görev" üzerinde çalışıyorsanız ve kendi görev dalınızdaysanız, gece check-in işlemlerinizi yapın, böylece çalışmanızı koruyun.


0

Genelde ne zaman yeni bir şey eklersem kontrol ederim, ancak belirli şeyleri ayırmak isterim.

Bu, yeni bir bağımlılık eklersem, değişiklikleri ya derlenene kadar yaparım ya da sıfırdan başlayarak tekrar yapmak için zaman kaybettirecek kadar büyükler. Eğer daha büyük bir görevim varsa, mantıklı olduğu zaman (fonksiyon başına bir kere, onu her seferinde başarılı bir şekilde derleyip çalıştırdığımda, vb.) Birden çok kez taahhüt etmeye çalışıyorum.

Ayrıca bir yedekleme noktası istediğimde (yani, "şimdi denediğim şey işe yaramazsa veya çok karmaşık hale gelirse, şimdi olduğu gibi koda geri dönmek istiyorum" veya birileri benim olduğumu bırakmamı istediğinde söz veriyorum. bazı acil sorunları yapmak ve düzeltmek).

Merkezi bir kaynak kontrol sistemi kullanıyorsanız, yedekleme noktaları için keyfi bir şekilde işlem yapamazsınız, çünkü derleme / çalışma taahhüdü ekibinizdeki herkesi etkiler.

Genellikle kazan kodunu eklemeye başladığımda (örneğin, django web sitesine yeni bir webapp ekleyin), yaptığım her işlemi taahhüt ediyorum.

Kod yazmak / yazmak için bir öğreticiyi takip edersem, eğitim iletilerinde adım adlarını öğreticide kullanırım. Bu şekilde, revizyonları dağıtabilir ve daha sonra herhangi bir noktada bir öğretici adımın ne yaptığını görebilirim.

Örneğin, tek bir kod dosyasından oluşan bir projem var diyelim. Projenin son derece temel işlevsellik (1 veya 2 özellik) ile çalışmasını sağlamak için yaklaşık 10 satır boyler kod kodu ve 100 satır alacaktır.

Malzeme eklemenin ne kadar zor olduğuna bağlı olacaktır:

  • kazan plakası kodunu eklemek önemsiz olsaydı, bunu ekler ve diğer koda başlamadan hemen önce yapardım (bu şekilde, eğer bir hata yaparsam ya da garip bir hata yaparsam, sadece kazan koduna geri dönebilir ve başlayabilirim) tekrar).

  • Eğer kod önemsiz olmasaydı, her yeni bir şey eklediğimde (her iki kod satırı arasında herhangi bir yerde, yüzlerce ya da öylesine değişti) taahhüt ederim.

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.