46 Git ve Github ile sürüm kontrolü ve işbirliği
Bu bölüm, Git’i başkalarıyla işbirliği yapmak için kullanmaya genel bir bakış sunar. Daha kapsamlı öğreticiler, Kaynaklar bölümünün alt kısmında bulunabilir.
46.1 Git nedir?
Git, bir klasördeki değişiklikleri izlemeye izin veren bir sürüm kontrol yazılımıdır. Word, LibreOffice veya Google belgelerindeki “değişikliği izle” seçeneği gibi kullanılabilir. Sürüm kontrolü için en güçlü ve en çok kullanılan seçeneklerden biridir.
Neden hiç duymadım? Geliştirici geçmişine sahip kişiler rutin olarak sürüm kontrol yazılımlarını (Git, Mercurial, Subversion veya diğerleri) kullanmayı öğrenirken, nicel disiplinlerden pek azımıza bu beceriler öğretilir. Sonuç olarak, çoğu epidemiyolog, çalışmaları sırasında bunu asla duymaz ve iş sırasında öğrenmek zorundadır.
Bekle, Github’ı duydum, aynı mı? Tam olarak değil, ancak bunları sıklıkla birlikte kullanıyorsunuz ve size nasıl yapılacağını göstereceğiz. Kısacası: Git, bir yazılım parçası olan sürüm kontrol sistemidir. Bilgisayarınızda yerel olarak veya bir klasörü ana bilgisayar web sitesi ile senkronize etmek için kullanabilirsiniz. Varsayılan olarak, komut satırında Git talimatlarını vermek için bir terminal kullanılır.
Komut satırından kaçınmak ve aynı eylemleri gerçekleştirmek için bir Git istemcisi/arayüz kullanabilirsiniz (en azından basit, çok yaygın olanlar için).
Klasörünüzü başkalarıyla işbirliği yapmak için bir ana web sitesinde depolamak istiyorsanız, Github, Gitlab, Bitbucket veya diğerlerinde bir hesap oluşturabilirsiniz.
Böylece, dosyalarınızı hem yerel olarak bilgisayarınızda hem de bir Github sunucusunda uzaktan yönetmek için arka planda Git kullanan Github Desktop istemcisini/arayüzünü kullanabilirsiniz.
46.2 Neden Git ve Github kombinasyonunu kullanmalısınız?
Git kullanımı şunları kolaylaştırır:
- Herhangi bir önceki duruma kolayca geri dönebilmeniz için belgelenmiş sürümleri artımlı değişikliklerle arşivleme
- Paralel dallara sahip olmak, yani gözden geçirmeden sonra değişiklikleri entegre etmek için yapılandırılmış yollarla geliştirilen/“çalışan” sürümler
Bu, başkalarıyla işbirliği yapmasanız bile bilgisayarınızda yerel olarak yapılabilir. Sen hiç:
bir kod bölümünü sildiğiniz için pişmanlık duydunuz, ancak iki ay sonra gerçekten ihtiyacınız olduğunu fark ettiniz mi?
duraklatılmış bir projeye geri dönün ve modellerden birinde bu zor değişikliği yapıp yapmadığınızı hatırlamaya çalıştınız mı?
denemek için bir model_1.R dosyası ve başka bir model_1_test.R dosyası ve bir model_1_not_working.R dosyası mı vardı?
bir report.Rmd dosyası, bir report_full.Rmd dosyası, bir report_true_final.Rmd dosyası, bir report_final_20210304.Rmd dosyası, bir report_final_20210402.Rmd dosyası vardı ve arşivleme becerilerinize lanet mi okudunuz?
Git tüm bunlara yardımcı olacak ve sadece bunun için öğrenmeye değer.
Ancak, işbirlikçi projeleri desteklemek için Github gibi bir çevrimiçi depo ile kullanıldığında daha da güçlü hale gelir. Bu şunları kolaylaştırır:
İşbirliği: diğerleri değişiklikleri inceleyebilir, yorumlayabilir ve değişiklikleri kabul edebilir/reddetebilir
Kodunuzu, verilerinizi ve çıktılarınızı paylaşmak ve halktan (veya ekibinizle özel olarak) geri bildirim davet etmek ve şunlardan kaçınmak:
“Hata, son sürümü göndermeyi unuttum ve şimdi bu yeni dosya üzerinde iki günlük çalışmayı yeniden yapmanız gerekiyor”
Mina, Henry ve Oumar aynı anda tek bir komut dosyası üzerinde çalıştı ve değişikliklerini manuel olarak birleştirmeleri gerekiyor
Dropbox ve Sharepoint üzerinde iki kişi aynı dosyayı değiştirmeye çalışıyor ve bu bir senkronizasyon hatası yaratıyor.
Kulağa karmaşık geliyor, ben programcı değilim
Olabilir. Gelişmiş kullanım örnekleri oldukça korkutucu olabilir. Ancak, R’ye ve hatta Excel’e çok benzer şekilde, aracın avantajlarından yararlanmak için uzman olmanıza gerek yoktur. Az sayıda işlev ve kavram öğrenmek, değişikliklerinizi izlemenize, dosyalarınızı çevrimiçi bir havuzda senkronize etmenize ve çok kısa bir süre içinde iş arkadaşlarınızla işbirliği yapmanıza olanak tanır.
Öğrenme eğrisi nedeniyle, acil durum bağlamı bu araçları öğrenmek için en iyi zaman olmayabilir. Ancak öğrenme adım adım gerçekleştirilebilir. Birkaç kavram edindikten sonra, iş akışınız oldukça verimli ve hızlı olabilir.
Git aracılığıyla insanlarla işbirliği yapmanın bir zorunluluk olduğu bir proje üzerinde çalışmıyorsanız, ortak çalışmaya dalmadan önce onu solo olarak kullanmaktan emin olmak için iyi bir zamandır.
46.3 Kurmak
Git’i yükleyin
Git, bilgisayarınızda değişiklikleri, dalları (sürümleri), birleştirmeleri ve geri dönmeyi izleyen perde arkasındaki motordur. Önce yapmanız gerekir https://git-scm.com/downloads adresinden Git’i yükleyin.
Bir arayüz kurun (isteğe bağlı ancak önerilir)
Git’in komut satırı terminaline yazılabilen kendi komut dili vardır. Bununla birlikte, birçok istemci/arayüz vardır ve geliştirici olmayanlar olarak, günlük kullanımınızda Git ile doğrudan etkileşime nadiren _ihtiyacınız olur ve arayüz genellikle dosya değişiklikleri veya dalları için güzel görselleştirme araçları sağlar.
Yeni başlayanlardan daha karmaşık olanlara kadar tüm işletim sistemlerinde birçok seçenek mevcuttur. Yeni başlayanlar için iyi seçenekler arasında RStudio Git bölmesi ve Github Desktop, ki bu bölümde durum nasıl olacak.
Orta (daha güçlü, ancak daha karmaşık) seçenekler arasında Source Tree, Gitkracken, Smart Git ve diğerleri bulunur.
Git istemcileri hakkında hızlı açıklama.
Not: Arabirimlerin tümü Git’i dahili olarak kullandığından, bunlardan birkaçını deneyebilir, belirli bir projede birinden diğerine geçebilir, konsolu arabiriminizin desteklemediği bir eylem için zamanında kullanabilir ve hatta üzerinde herhangi bir sayıda çevrimiçi eylem gerçekleştirebilirsiniz. Github.
Aşağıda belirtildiği gibi, zaman zaman Git komutlarını RStudio terminal bölmesi (R Konsoluna bitişik bir sekme) veya Git Bash terminali gibi bir terminale yazmanız gerekebilir.
Github hesabı
github.com adresinde ücretsiz bir hesap için kaydolun.
Bir uygulama ile iki faktörlü kimlik doğrulamayı ayarlamanız istenebilir. Telefonunuz. Github yardım belgelerinde daha fazlasını okuyun.
Github Desktop kullanıyorsanız, kurulumdan sonra bu adımları izleyerek Gitub kimlik bilgilerinizi girebilirsiniz. . Bunu bilmiyorsanız, daha sonra yapmaya çalıştığınızda kimlik bilgileri sorulacaktır. Github’dan bir projeyi klonlayın.
46.4 Kelime bilgisi, kavramlar ve temel işlevler
R öğrenirken olduğu gibi Git’i anlamak için hatırlamanız gereken biraz kelime hazinesi vardır. İşte başlamanıza yardımcı olacak temel bilgiler/ etkileşimli öğretici. Sonraki bölümlerde, arayüzlerin nasıl kullanılacağını göstereceğiz, ancak zihinsel modelinizi oluşturmak için kelime dağarcığı ve kavramları aklınızda bulundurmak iyidir ve arayüzleri kullanırken bunlara ihtiyacınız olacaktır.
Depo
Git repo (“repo”), projeniz için tüm alt klasörleri ve dosyaları (veriler, kodlar, resimler vb.) ve bunların revizyon geçmişlerini içeren bir klasördür. Depodaki değişiklikleri onunla izlemeye başladığınızda Git, tüm izleme bilgilerini içeren gizli bir klasör oluşturacaktır. Tipik bir Git deposu, R Project klasörünüzdür ([R projeleri] hakkındaki el kitabı sayfasına bakın).
Github, Github Desktop veya Rstudio’dan bir Git deposunun nasıl oluşturulacağını (initialize) sonraki bölümlerde göstereceğiz.
Taahhütler
taahhüt, projenin belirli bir zamanda anlık görüntüsüdür. Projede bir değişiklik yaptığınızda, dosyalarınızda yapılan değişiklikleri (delta) izlemek için yeni bir taahhütte bulunacaksınız. Örneğin, bazı kod satırlarını düzenlemiş ve ilgili bir veri kümesini güncellemiş olabilirsiniz. Değişiklikleriniz kaydedildikten sonra, bu değişiklikleri tek bir “taahhüt” altında toplayabilirsiniz. Her işlemin benzersiz bir kimliği vardır (bir karma). Sürüm kontrolü amacıyla, taahhütlere dayalı olarak projenizi zamanında geri alabilirsiniz, bu nedenle onları nispeten küçük ve tutarlı tutmak en iyisidir. Ayrıca, “taahhüt mesajı” adı verilen değişikliklerin kısa bir açıklamasını da ekleyeceksiniz.
Aşamalı değişiklikler? Değişiklikleri aşamaya geçirmek, bir sonraki işleme hazırlanmak için bunları hazırlama alanına eklemektir. Buradaki fikir, belirli bir taahhütte hangi değişikliklerin dahil edileceğine ince bir şekilde karar verebilmenizdir. Örneğin, bir komut dosyasında model belirtimi üzerinde çalıştıysanız ve daha sonra başka bir komut dosyasındaki bir şekil üzerinde çalıştıysanız, iki farklı kesinliğe sahip olmak mantıklı olacaktır (şekildeki değişiklikleri geri almak isteyip modeli).
Şubeler
Dal, deponuzdaki bağımsız bir değişiklik satırını, proje dosyalarınızın paralel, alternatif bir sürümünü temsil eder.
Dallar, değişiklikleri genellikle projenizin birincil/son/“canlı” versiyonu olan ana dalına dahil edilmeden önce test etmek için kullanışlıdır. Bir dal üzerinde denemeyi bitirdiğinizde, değişiklikleri birleştirerek ana dalınıza getirebilir veya değişiklikler o kadar başarılı olmazsa silebilirsiniz.
Not: Şubeleri kullanmak için başka kişilerle işbirliği yapmanız veya uzak bir çevrimiçi veri havuzuna sahip olmanız gerekmez.
Yerel ve uzak depolar
Klonlamak, Git deposunun bir kopyasını başka bir yerde oluşturmaktır.
Örneğin, Github’dan bilgisayarınızda yerel olarak bir çevrimiçi depoyu klonlayabilirsiniz veya yerel bir depoyla başlayabilir ve onu çevrimiçi olarak Github’a kopyalayabilirsiniz.
Bir havuzu klonladığınızda, proje dosyaları iki yerde bulunur:
fiziksel bilgisayarınızdaki YEREL veri havuzu. Dosyalarda/kodda asıl değişiklikleri yaptığınız yer burasıdır.
UZAK, çevrimiçi depo: Github deposundaki (veya başka herhangi bir web barındırıcısındaki) proje dosyalarınızın sürümleri.
Bu depoları senkronize etmek için daha fazla fonksiyon kullanacağız. Gerçekten de, Sharepoint, Dropbox veya diğer senkronizasyon yazılımlarından farklı olarak Git, yerel deponuzu veya çevrimiçi olanı temel alarak veya tam tersi şekilde otomatik olarak güncellemez. Ne zaman ve nasıl senkronize edeceğinizi siz seçersiniz.
git fetch
uzak depodaki yeni değişiklikleri indirir ancak yerel deponuzu değiştirmez. Bunu uzak deponun durumunu kontrol etmek olarak düşünün.git pull
uzak depolardaki yeni değişiklikleri indirir ve yerel deponuzu günceller.Yerel olarak bir veya birkaç taahhütte bulunduğunuzda, taahhütleri uzak depoya
git push
edebilirsiniz. Bu, değişikliklerinizi Github’a gönderir, böylece diğer insanlar isterlerse onları görebilir ve çekebilir.
46.5 Başlayın: yeni bir depo oluşturun
Yeni depolar oluşturmanın birçok yolu vardır. Bunu konsoldan, Github’dan bir arayüzden yapabilirsiniz.
Kurulum için iki genel yaklaşım şunlardır:
- Mevcut veya yeni bir Github deposundan yeni bir R Projesi oluşturun (yeni başlayanlar için tercih edilir) veya
- Mevcut bir R projesi için bir Github deposu oluşturun
Başlangıç dosyaları
Yeni bir havuz oluşturduğunuzda, isteğe bağlı olarak aşağıdaki dosyaların tümünü oluşturabilir veya daha sonraki bir aşamada havuzunuza ekleyebilirsiniz. Genellikle havuzun “kök” klasöründe yaşarlar.
README dosyası, projenizin neden var olduğunu ve onu kullanmak için başka neleri bilmeleri gerektiğini anlamak için birinin okuyabileceği bir dosyadır. İlk başta boş olacak, ancak daha sonra tamamlamanız gerekir.
Bir .gitignore dosyası, her satırın Git’in yok sayması gereken (değişiklikleri izlememesi) klasörleri veya dosyaları içerdiği bir metin dosyasıdır. Bununla ilgili daha fazla bilgi edinin ve örneklere bakınburadan.
Çalışmanız için bir lisans seçebilirsiniz, böylece diğer insanlar çalışmanızı hangi koşullar altında kullanabileceklerini veya çoğaltabileceklerini bilsinler. Daha fazla bilgi için bkz. [Creative Commons lisansları] https://creativecommons.org/licenses/).
Github’da yeni bir depo oluşturun
Yeni bir depo oluşturmak için Github’da oturum açın ve yeni bir depo oluşturmak için yeşil düğmeyi arayın. Artık boş olan bu depo bilgisayarınıza yerel olarak klonlanabilir (bir sonraki bölüme bakın).
Deponuzun genel (internetteki herkes tarafından görülebilir) veya özel (yalnızca izne sahip olanlar tarafından görülebilir) olmasını seçmelisiniz. Verileriniz hassassa, bunun önemli etkileri vardır. Deponuz özelse, kodunuzu bulutta otomatik olarak çalıştırmak için Github actions kullanıyorsanız, örneğin gelişmiş özel durumlarda bazı kotalarla karşılaşırsınız.
Github deposundan klonlama
Bilgisayarınızda yeni bir yerel R projesi oluşturmak için mevcut bir Github deposunu klonlayabilirsiniz.
Github deposu, zaten var olan ve içerik içeren bir depo olabilir veya az önce oluşturduğunuz boş bir depo olabilir. Bu ikinci durumda, esasen Github deposunu ve yerel R projesini aynı anda yaratıyorsunuz (yukarıdaki talimatlara bakın).
Not: Bir Github deposunda katkıda bulunma hakkınız yoksa, önce depoyu profilinize fork yapmak ve ardından diğer işlemlere geçmek mümkündür. Çatallanma bu bölümün sonunda açıklanmıştır, ancak önce diğer bölümleri okumanızı öneririz.
Adım 1: Github’da depoya gidin, yeşil “Kod” düğmesine tıklayın ve HTTPS klon URL’sini kopyalayın (aşağıdaki resme bakın)
Bir sonraki adım herhangi bir arayüzde gerçekleştirilebilir. Rstudio ve Github masaüstü ile örneklendireceğiz.
Rstudio’da
RStudio’da Dosya > Yeni Proje >Sürüm Kontrolü > Git’e tıklayarak yeni bir R projesi başlatın.
- “Depo URL’si” istendiğinde, HTTPS URL’sini Github'dan yapıştırın
- R projesine kısa, bilgilendirici bir ad verin
- Yeni R Projesinin yerel olarak nereye kaydedileceğini seçin
- “Yeni oturumda aç” seçeneğini işaretleyin ve “Proje oluştur” u tıklayın
Artık Github deposunun bir klonu olan yeni, yerel bir RStudio projesindesiniz. Bu yerel proje ve Github deposu artık bağlantılı.
Github Desktop’ta
Dosya > Bir depoyu klonla üzerine tıklayın
URL sekmesini seçin
Github’dan HTTPS URL’sini ilk kutuya yapıştırın
Yerel deponuzun olmasını istediğiniz klasörü seçin
“KLON” u tıklayın
Mevcut R projesinden yeni Github deposu
Alternatif bir kurulum senaryosu, içeriği olan mevcut bir R projeniz olması ve bunun için bir Github deposu oluşturmak istemenizdir.
- Proje için yeni, boş bir Github deposu oluşturun (yukarıdaki talimatlara bakın)
- Bu depoyu yerel olarak klonlayın (yukarıdaki HTTPS talimatlarına bakın)
- Önceden var olan R projenizdeki tüm içeriği (kodlar, veriler, vb.) bu yeni boş, yerel depoya kopyalayın (örn. kopyala ve yapıştır kullanın).
- Yeni projenizi RStudio’da açın ve Git bölmesine gidin. Yeni dosyalar, artık Git tarafından izlenen dosya değişiklikleri olarak kaydedilmelidir. Bu nedenle, bu değişiklikleri bir taahhüt olarak paketleyebilir ve Github’a gönderebilirsiniz. Bir kez basıldığında, Github’daki depo tüm dosyaları yansıtacaktır.
Bu işlemle ilgili ayrıntılar için aşağıdaki Github iş akışı bölümüne bakın.
Şimdi nasıl görünüyor?
RStudio’da
Bir Github deposunu yeni bir R projesine klonladığınızda, artık RStudio’da bir “Git” sekmesi görürsünüz. Bu sekme, R Ortamınız ile aynı RStudio bölmesinde görünür:
Lütfen yukarıdaki resimde daire içine alınmış butonlara dikkat edin, çünkü bunlar daha sonra atıfta bulunuldu (soldan sağa):
- Kaydedilen dosya değişikliklerini yerel şubede kabul etme düğmesi (bu, yeni bir pencere açar)
- Çekmek için mavi ok (dalın uzak/Github sürümünde yapılan değişikliklerle şubenin yerel sürümünüzü güncelleyin)
- Push için yeşil ok (dalın yerel sürümünüz için tüm taahhütleri/değişiklikleri o dalın uzak/Github sürümüne gönderin)
- RStudio’daki Git sekmesi
- Sağda taban olarak gösterilen yerel şubeyi kullanarak YENİ bir şube oluşturma düğmesi. Neredeyse her zaman ana daldan ayrılmak istersiniz (ana dalı güncellemek için ilk kez çektikten sonra)
- Şu anda çalıştığınız şube
- Kodda veya diğer dosyalarda yaptığınız değişiklikler aşağıda görünecektir
Github Masaüstünde
Github Desktop, tüm depolarınızı yönetmenize izin veren bağımsız bir uygulamadır. Açtığınızda, arayüz üzerinde çalışmak istediğiniz depoyu seçmenize ve ardından oradan temel Git eylemlerini gerçekleştirmenize olanak tanır.
46.6 Git + Github iş akışı
Sürece genel bakış
Kurulumu tamamladığınızda (yukarıda açıklanmıştır), yerel bir R projesine bağlı (klonlanmış) bir Github deposuna sahip olacaksınız. main dalı (varsayılan olarak oluşturulur), tüm dosyaların sözde “canlı” versiyonudur. Değişiklik yapmak istediğinizde, ana daldan yeni bir dal oluşturmak (“Kopya Oluştur” gibi) iyi bir uygulamadır. Dal oluşturmak kolay ve hızlı olduğu için bu Git’teki tipik bir iş akışıdır.
Tipik bir iş akışı aşağıdaki gibidir:
Yerel deponuzun güncel olduğundan emin olun, değilse güncelleyin
Daha önce çalıştığınız şubeye gidin veya bazı şeyleri denemek için yeni bir şube oluşturun.
Bilgisayarınızda yerel olarak dosyalar üzerinde çalışın, bu şubeye bir veya birkaç taahhütte bulunun
Şubenin uzak sürümünü değişikliklerinizle güncelleyin (push)
Şubenizden memnun kaldığınızda, değişiklikleri aktarmak için çalışan şubenin çevrimiçi sürümünü çevrimiçi “ana” şubeye birleştirebilirsiniz.
Diğer ekip üyeleri de aynı şeyi kendi şubeleriyle yapıyor olabilir veya belki de sizin çalışma şubenize taahhütlere katkıda bulunuyor olabilir.
Yukarıdaki süreci aşağıda daha ayrıntılı olarak adım adım inceliyoruz. İşte geliştirdiğimiz bir şema - iki yönlü bir tablo biçiminde olduğundan epidemiyologların anlamasına yardımcı olmalıdır.
İşte başka bir şema.
Not: Yakın zamana kadar “master” dal terimi kullanılıyordu, ancak şimdi “main” dal olarak anılıyor.
Görüntü source
46.7 Yeni bir dal oluştur
Üzerinde çalışmak için bir dal seçtiğinizde Git, çalışma dizininizi bu dalda en son bulunduğunuz zamanki gibi sıfırlar.
Rstudio Git bölmesinde
“Ana” dalda olduğunuzdan emin olun ve ardından yeni bir dal oluşturmak için mor simgeye tıklayın (yukarıdaki resme bakın).
- Şubenize tek kelimelik açıklayıcı bir ad vermeniz istenecektir (gerekirse alt çizgi kullanabilirsiniz).
- Yerel olarak hala aynı R projesinde olduğunuzu ancak artık “ana” dal üzerinde çalışmadığınızı göreceksiniz.
- Yeni şube oluşturulduktan sonra Github web sitesinde şube olarak da görünecektir.
“Geçmiş” e tıkladıktan sonra Rstudio’daki Git Bölmesi’ndeki dalları görselleştirebilirsiniz.
Masaüstünde Github
İşlem çok benzer, dalınıza bir isim vermeniz isteniyor. Ardından, yeni şubenin uzak depoda da görünmesini sağlamak için “Dalınızı Github’da yayınla” denilmelidir.
Konsol Kullanırken
Perde arkasında gerçekte olan şey, “git dalı” ile yeni bir şube oluşturmanız ve ardından “git checkout” ile dala gitmenizdir (Örneğin Git’e sonraki taahhütlerinizin orada gerçekleşeceğini söyleyin). Git deponuzdan:
git branch my-new-branch # Yeni bir dal oluşturun
git checkout my-new-branch # Oluşturulan dala gidin
git checkout -b my-new-branch # İkisi aynı anda (Kısayol)
Konsolu kullanma hakkında daha fazla bilgi için sondaki Git komutlarına bakınız.
46.8 Değişiklikleri Uygula (Commit Changes)
Artık kodu düzenleyebilir, yeni dosyalar ekleyebilir, veri kümelerini güncelleyebilirsiniz.
Değişikliklerinizin her biri ilgili dosya kaydedildikten sonra izlenir. Değiştirilen dosyalar RStudio Git sekmesinde, Github Desktop’ta veya terminalde ‘git status’ komutu kullanılarak görünecektir (aşağıya bakın).
Önemli değişiklikler yaptığınızda (örneğin, bir kod bölümü ekleme veya güncelleme), bu değişiklikleri duraklatın ve kabul edin. Bir taahhüdü, ortak bir amaçla ilgili değişikliklerin bir “topluluğu” olarak düşünün. Üzerinde değişiklik yaptıktan sonra bir dosyayı her zaman revize etmeye devam edebilirsiniz.
Uygulamayla ilgili tavsiye: genel olarak, bir sorun ortaya çıktığında kolayca geri alınabilecek küçük uygulamalar yapmak, ortak bir amaç ile ilgili değişiklikleri birlikte yapmak daha iyidir. Bunu başarmak için sık sık uygulamalarda bulunmanız gerektiğini göreceksiniz. Başlangıçta, muhtemelen sık sık uygulamada bulunmayı unutacaksınız, ancak daha sonra alışkanlık halini almaktadır.
Rstudio’da
Aşağıdaki örnek, son işlemden bu yana, “collaboration.Rmd” R Markdown komut dosyasının değiştiğini ve birkaç PNG görüntüsünün eklendiğini göstermektedir.
Dosya adlarının yanındaki sarı, mavi, yeşil ve kırmızı karelerin neyi temsil ettiğini merak ediyor olabilirsiniz. İşte RStudio kolay kullanım sayfasından anlamlarını açıklayan bir anlık görüntü. Değişikliklerin sarı “?” ile işaretlendiğine, halen görüntülenebilir, işlenebilir ve gönderilebilir(push) olduğuna dikkat edin.
Git sekmesindeki “Commit” düğmesine basın, yeni bir pencere açılacaktır(aşağıda gösterilmiştir)
Sol üstteki kutuda bir dosya adına tıklayın
Bu dosyada yaptığınız değişiklikleri gözden geçirin (aşağıda yeşil veya kırmızı renkle vurgulanmıştır)
Gönderirken bu değişiklikleri içerecek olan dosyayı “stage” yapın. Bunu dosya adının yanındaki kutuyu işaretleyerek yapabilirsiniz. Alternatif olarak, birden fazla dosya adını vurgulayabilir ve ardından “Stage(Aşama)” yı tıklayabilir.
Kısa ama açıklayıcı bir Commit mesajı yazın (gereklidir)
“Commit” düğmesine basın. Başarıyı gösteren bir açılır kutu veya bir hata mesajı görünecektir.
Artık istediğiniz kadar değişiklikte bulunabilir ve commit edebilirsiniz.
Masaüstünde Github
Solda değiştirilen dosyaların listesini görebilirsiniz. Eğer bir metin dosyası seçerseniz, yapılan değişikliklerin bir özetini görürsünüz. sağ bölmede (görünüm .docs veya .xlsx gibi daha karmaşık dosyalarda çalışmaz).
Değişiklikleri düzenlemek için dosya adlarının yanındaki küçük kutuyu işaretlemeniz yeterlidir. Ne zaman bu uygulamaları eklemek istediğiniz dosyaları seçerseniz commit edebilirsiniz. Bir isim verip, isteğe bağlı olarak bir açıklama yazmanın ardından commit edilebilir.
Konsolda
Sahne arkasında kullanılan iki fonksiyon, seçme/sahneleme için “git add” fonksiyonudur. dosyalar ve ‘git commit’ commit etmek içindir.
git status # değişiklikleri izle
git add new_pages/collaboration.Rmd # commit edilecek dosyaları seçin (= değişiklikleri yapın)
git commit -m "Describe commit from Github Desktop" # değişiklikleri bir mesajla commit et
git log # geçmiş commitlerle ilgili bilgileri görüntüle
Önceki bir commit’i değiştirin
Bazı değişiklikler yaparsanız, çalışmaya devam ederseniz ve geçmiş commit’e “ait” olması gereken değişiklikler yaptığınızı fark ederseniz ne olur (sizce). Korkmayın! Bu değişiklikleri önceki gönderinize ekleyebilirsiniz.
Rstudio’da, COMMIT düğmesiyle aynı satırda bir “Önceki commit’i değiştir” kutusu olduğu için oldukça açıktır.
Belirsiz bir nedenle, işlevsellik Github Desktop’ta olduğu gibi uygulanmamıştır, ancak (kavramsal olarak garip ama kolay) bir yol vardır. Henüz değişikliklerinizi commit etmiş ancak push etmediyseniz, COMMIT düğmesinin hemen altında bir “GERİ AL” düğmesi görünür. Üzerine tıklayın geri alacaktır (ancak aşamalı dosyalarınızı ve commit mesajınızı saklayın). Değişikliklerinizi kaydedin, gerekirse commit’e yeni dosyalar ekleyin ve tekrar commit edin.
Konsolda:
git add [YOUR FILES] # Yeni değişikliklerinizi aşamalandırın
git commit --amend # Önceki commit'i değiştir
git commit --amend -m "An updated commit message" # Önceki commitlerini değiştirin VE mesajını güncelleyin
Not: Zaten herkese açık olan ve ortak çalışanlarınızla paylaşılan commitleri değiştirmeden önce düşünün.
46.9 Değişiklikleri Github’a kadar çekin ve iletin
“Önce PULL (çekin), sonra PUSH(iletin)”
Projeniz üzerinde çalışmaya başlamadan önce fetch(getirmek) ve pull(çekmek), yerel bilgisayarınızdaki dalın sürümünü uzak/Github sürümünde yapılan değişikliklerle güncellemek iyi bir uygulamadır.
sık sık ÇEKİN. tereddüt etmeyin. İtmeden önce daima çekin. Değişiklikleriniz yapıldığında ve commit edildiğinde ve projenizin durumundan memnun olduğunuzda, gönderilerinizi dalınızın uzak/Github sürümüne iletebilirsiniz.
Depo üzerinde çalışırken tekrarlayın.
Not: Commit edilen ancak gönderilmeyen (yani hala yerel olan) değişiklikleri geri almak, uzak depoya gönderilen (ve belki de zaten başka biri tarafından çekilmiş) değişiklikleri geri almaktan çok daha kolaydır, bu nedenle üzerinde çalıştığınız görevde değişiklik yapmayı bitirdiğinizde commit etmek daha iyidir.
Rstudio’da
PULL - İlk olarak, “Çek” simgesine (aşağı ok) tıklayın.
PUSH - Yeşil “Çek” simgesine (yukarı ok) tıklayın. Github kullanıcı adınızı ve şifrenizi girmeniz istenebilir. İlk sorulduğunda, Terminal’e Git komut satırını girmeniz gerekebilir:
- git config –global user.email “[[email protected] (mailto:[email protected]){.email}” (Github e-posta adresiniz) ve
- git config –global user.name “Github kullanıcı adınız”
Bu komutların nasıl girileceği hakkında daha fazla bilgi edinmek için aşağıdaki Git komutları bölümüne bakın.
İPUCU: Parolanızı çok sık mı istedi? Havuza bağlanmak için bu [eğiticinin (https://happygitwithr.com/credential-caching.html#credential-caching) 10. ve 11. bölümlerine bakın.
Github Desktop’ta
Uzak depoda yeni commitler olup olmadığını kontrol etmek için “Fetch Origin” düğmesine tıklayın.
Git, uzak depoda yeni taahhütler bulursa, düğme bir “Çek” düğmesine dönüşür. İtme ve çekme için aynı düğme kullanıldığından, daha önce çekmediyseniz değişikliklerinizi itemezsiniz.
Tüm commitleri (sizin ve diğerleri) görmek için “Geçmiş” sekmesine (“Değişiklikler” sekmesinin yanında) gidebilirsiniz. Bu, işbirlikçilerinizin yaptıkları hakkında bilgi edinmenin güzel bir yoludur. Commit mesajını, varsa açıklamasını okuyabilir ve diff bölmesini kullanarak iki dosyanın kodunu karşılaştırabilirsiniz.
Tüm uzaktan değişiklikler çekildikten ve en az bir yerel değişiklik yapıldıktan sonra, aynı düğmeye tıklayarak basabilirsiniz.
Konsol
Şaşırtıcı olmayan bir şekilde, komutlar getir(fetch), çek(pull) ve ittir(push) şeklindedir.
git fetch # uzak dizinde yeni commitler var mı?
git pull # Uzak commitleri yerel dalınıza getirin
git push # Bu dalın yerel commitlerini uzak dala aktarın
Çekmek istiyorum ama yerel işim var
Bu bazen olabilir: yerel deponuzda bazı değişiklikler yaptınız, ancak uzak depo sizin çekmediğinizi commit etti.
Git, değişikliklerinizin üzerine yazabileceği için çekmeyi reddedecek. Değişikliklerinizi korumak için [Happy Git with R (https://happygitwithr.com/pull-tricky.html) bölümünde iyi açıklanan birkaç strateji vardır. - değişikliklerinizi gerçekleştirin, uzaktan değişiklikleri alın, bunları çekin, gerekirse çakışmaları çözün (aşağıdaki bölüme bakın) ve her şeyi çevrimiçine gönderin - Değişikliklerinizi ‘saklayın’, bu tür onları bir kenara depolar, çeker, geri yükler ve ardından commit eder, herhangi bir çakışmayı çözer ve iter.
Uzak değişikliklerle ilgili dosyalar ve yerel değişikliklerinizle ilgili dosyalar çakışmıyorsa Git, çakışmaları otomatik olarak çözebilir.
Github Desktop’ta bu, düğmelerle yapılabilir. Saklamak için Branch>Tüm değişiklikleri sakla seçeneğine gidin.
46.10 Dalını Ana Gövde ile birleştir
Değişiklik yapmayı bitirdiyseniz, bu değişiklikleri ana dalda birleştirme işlemine başlayabilirsiniz. Durumunuza bağlı olarak bu hızlı olabilir veya ekip arkadaşlarınızı içeren kasıtlı inceleme ve onay adımlarını atmış olabilirsiniz.
Yerel olarak Github Desktop’ta
Github Desktop kullanarak dalları yerel olarak birleştirebilirsiniz. İlk olarak, commitlerin alıcısı olacak dallara, yani güncellemek istediğiniz dala gidin. Ardından Dal> Geçerli gövdeye birleştir menüsüne gidin ve tıklayın. Bir kutu, içe aktarmak istediğiniz dalı seçmenize olanak tanır.
Konsolda
İlk önce değişikliklerin alıcısı olacak dala geri dönün. Bu genellikle master şeklindedir, ancak başka bir dal da olabilir. Sonra master içine çalışma dalınızı birleştirin.
git checkout master # Master'a (veya taşımak istediğiniz dala) geri dönün
git merge this_fancy_new_branch
Bu sayfa daha gelişmiş bir dallanma örneği gösterir ve perde arkasında neler olduğunu biraz açıklar .
Github’da: çekme istekleri gönderme
İki dalı yerel olarak veya kimseye haber vermeden birleştirmek tamamen mümkün olmakla birlikte, bir birleşme ana gövdeye entegre edilmeden önce birkaç kişi tarafından tartışılabilir veya araştırılabilir. Sürece yardımcı olmak için Github, birleştirme ile ilgili bazı tartışma özellikleri sunar: çekme isteği.
Bir çekme isteği (bir “PR”), bir dalı diğeriyle birleştirme isteğidir (başka bir deyişle, çalışan dalınızın “ana” dala çekilmesine yönelik bir istek).
Bir çekme isteği, genellikle birden çok commit içerir. Bir çekme isteği, genellikle kabul edilmeden ve dal birleştirilmeden önce bir konuşma ve inceleme sürecini başlatır. Örneğin, [dplyr’s github] (https://github.com/tidyverse/dplyr/pulls) üzerinden çekme isteği tartışmalarını okuyabilirsiniz.
Doğrudan web sitesinden (aşağıda gösterildiği gibi) veya Github Desktop’tan bir çekme isteği (PR) gönderebilirsiniz.
- Github deposuna gidin (çevrimiçi)
- “Çekme İstekleri” sekmesini görüntüleyin ve “Yeni çekme isteği” düğmesini tıklayın
- Dalınızı ana gövde ile birleştirmek için açılır menüden seçin
- Ayrıntılı bir Çekme Talebi yorumu yazın ve “Çekme Talebi Oluştur” u tıklayın.
Aşağıdaki resimde, “ormanlar” dalı “ana” ile birleştirilmek üzere seçilmiştir:
Şimdi çekme isteğini görebilmelisiniz (aşağıdaki örnek resim):
- Dal birleştirilirse “ana” dalın nasıl değişeceğini görmek için “Dosyalar değişti” sekmesini inceleyin.
- Sağ tarafta, Github ID’lerini etiketleyerek ekibinizin üyelerinden inceleme talep edebilirsiniz. İsterseniz, ana ile birleştirmek için havuz ayarlarını bir onay incelemesi gerektirecek şekilde ayarlayabilirsiniz.
- Çekme talebi onaylandıktan sonra, “Birleştirme çekme isteği” aktif hale gelecektir. Buna tıklayın.
- Tamamlandıktan sonra dalınızı aşağıda açıklandığı gibi silin.
Çakışmaları çözme
İki kişi aynı satırları aynı anda değiştirdiğinde, birleştirme çatışması ortaya çıkar. Aslında Git, hangi sürümün tutulacağına karar vermeyi reddeder, ancak çatışmanın nerede olduğunu bulmanıza yardımcı olur. PANİK YAPMA. Çoğu zaman, çözmek oldukça basittir.
Örneğin, Github’da:
Birleştirme bir çakışma yarattıktan sonra, dosyayı favori düzenleyicinizde açın. Çatışma bir dizi karakterle belirtilecektir:
<<<<<<< HEAD ve ======= arasındaki metin yerel deponuzdan gelir ve ======= ile arasındaki metin >>>>>>> diğer daldan (orijin, master veya seçtiğiniz herhangi bir dal olabilir).
Kodun hangi sürümünü tercih ettiğinize karar vermeniz (veya uygunsa her iki taraftaki değişiklikler de dahil olmak üzere üçüncü bir tane yazmanız), gerisini silmeniz ve Git’in eklediği tüm işaretleri kaldırmanız gerekir (<<<<< << HEAD, =======,>>>>>>> Origin/master/your_branch_name).
Ardından, dosyayı kaydedin, düzenleyin ve commit edin: bu, birleştirilmiş sürümü “resmi” yapan committir. Daha sonra itmeyi unutmayın.
Siz ve işbirlikçileriniz ne kadar sık çekip iterseniz, çatışmalar o kadar küçük olur.
Not: Konsolla kendinizi rahat hissediyorsanız, daha fazla gelişmiş birleştirme seçenekleri (ör. boşlukları yok sayma, ortak çalışana öncelik verme vb.).
Dalınızı silin
Bir dal ana dalla birleştirildiğinde ve artık gerekli olmadığında, onu silebilirsiniz.
46.10.0.1 Github + Rstudio
Github’daki depoya gidin ve tüm dalları görüntülemek için düğmeye tıklayın (dalları seçmek için açılır menünün yanında). Şimdi dalınızı bulun ve yanındaki çöp kutusu simgesine tıklayın. Dal silmeyle ilgili daha fazla ayrıntıyı buradan okuyun -deponuzdaki-dallar#dal silme).
Dalı bilgisayarınızdan yerel olarak da sildiğinizden emin olun. Bu otomatik olarak olmayacak.
- RStudio’dan Ana gövdede olduğunuzdan emin olun.
- RStudio “Terminal”de (R konsolunun bitişiğindeki sekme) Git komutlarını yazmaya geçin ve şunu yazın: git branch -d branch_name, burada “branch_name” silinecek dalınızın adıdır
- Git sekmenizi yenileyin, dal gitmiş olmalı
46.10.0.2 Github Masaüstünde
Silmek istediğiniz dalı kontrol edin ve menüye gidin Dal> Sil.
Çatallama
Bir projeye katkıda bulunmak istiyorsanız, ancak bunu yapma hakkına sahip değilseniz veya sadece kişisel kullanımınız için değiştirmek istiyorsanız, bir projeyi çatallayabilirsiniz. Çatallamanın kısa bir açıklaması burada bulunabilir.
Github’da “Çatal” düğmesine tıklayın:
Bu, orijinal depoyu klonlayacaktır, ancak kendi profilinizde. Şimdi, Github’da deponun iki sürümü var: değiştiremeyeceğiniz orijinal sürüm ve profilinizdeki klonlanmış sürüm.
Ardından, önceki bölümlerde açıklanan yöntemlerden herhangi birini kullanarak çevrimiçi depo sürümünüzü yerel olarak bilgisayarınızda klonlamaya devam edebilirsiniz. Ardından, yeni bir dal oluşturabilir, değişiklik yapabilir, commit edebilir ve bunları uzak deponuza gönderebilirsiniz.
Sonuçtan memnun kaldığınızda, orijinal deponun sahipleri/koruyucuları ile konuşmaya başlamak için Github veya Github Desktop’tan bir Çekme Talebi oluşturabilirsiniz.
Ya resmi depodan bazı yeni commitlere ihtiyacınız olursa?
Birinin, klonlanmış sürümünüze dahil etmek istediğiniz resmi depoda kritik bir değişiklik yaptığını hayal edin. Fork’unuzu resmi depo ile senkronize etmek mümkündür. Terminalin kullanılmasını içerir, ancak çok karmaşık değildir. Çoğunlukla şunu hatırlamanız gerekir: - upstream = değiştiremeyeceğiniz resmi depo - origin = Github profilinizdeki depo sürümünüz
[Bu öğreticiyi (https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/syncing-a-fork) okuyabilir veya aşağıdakileri takip edebilirsiniz:
İlk önce Git terminalinizi yazın (deponuzun içine):
git remote -v
Yukarı akış deposunu henüz yapılandırmadıysanız, Origin ile başlayan iki satır görmelisiniz. “fetch” ve “push”un işaret ettiği uzak depoyu gösterirler. Unutmayın, Origin, Github’daki deponun kendi sürümünüz için geleneksel takma addır. Örneğin:
Şimdi yeni bir uzak depo ekleyin:
git remote add upstream https://github.com/appliedepi/epirhandbook_eng.git
Burada adres, bir depoyu klonladığınızda Github’un ürettiği adrestir (klonlama ile ilgili bölüme bakın). Şimdi dört uzak işaretçiniz olacak:
Artık kurulum tamamlandığında, değişiklikleri orijinal (upstream) deposundan almak istediğinizde, güncellemek istediğiniz dala(checkout) gitmeniz ve şunu yazmanız yeterlidir:
git fetch upstream # Uzak depodan yeni commitleri alın
git checkout the_branch_you_want_to_update
git merge upstream/the_branch_you_want_to_update # Yukarı akış dalını kendi dalınızla birleştirin.
git push # Uzak deponun kendi sürümünüzü güncelleyin
Çakışmalar varsa, bunları Çakışmaları çözme bölümünde açıklandığı gibi çözmeniz gerekecektir.
Özet: çatallama klonlanıyor, ancak Github sunucu tarafında. Eylemlerin geri kalanı, tipik işbirliği iş akışı eylemleridir. (klonlama, itme, çekme, commit etme, birleştirme, çekme isteklerini gönderme…).
Not: forking bir Git komutu değildir bir kavram olsa da, [Bitbucket] https://www.atlassian.com/git/tutorials/comparing-workflows/forking-workflow gibi diğer Web ana bilgisayarlarında da bulunur).
46.11 Öğrendiklerimiz
Şunları nasıl yapacağınızı öğrendiniz:
- Git’i klasörlerinizdeki değişiklikleri takip edecek şekilde ayarlayın,
- yerel deponuzu uzak bir çevrimiçi depoya bağlayın,
- değişiklikleri commit edin,
- yerel ve uzak depolarınızı senkronize edin.
Bütün bunlar sizi harekete geçirmeli ve epidemiyologlar olarak ihtiyaçlarınızın çoğu için yeterli olmalıdır. Genellikle geliştiriciler kadar gelişmiş kullanıma sahip değiliz.
Ancak, daha ileri gitmek isterseniz (veya buna ihtiyaç duyarsanız) Git’in commit geçmişlerini basitleştirmek, bir veya birkaç işlemi geri almak, kesin bir işlem yapmak vb. için daha fazla güç sunduğunu bilin. Bazıları tam bir sihirbazlık gibi gelebilir, ancak şimdi temellere sahipseniz, üzerine inşa etmek daha kolaydır.
Rstudio ve Github Desktop’taki Git bölmesi, çalışma alanımızda yeni başlayanlar / günlük kullanım için iyi olsa da, bazı orta / gelişmiş Git işlevleri için bir arayüz sunmadıklarını unutmayın. Bazı daha eksiksiz arayüzler, işaretle ve tıkla (genellikle daha karmaşık bir düzen pahasına) ile daha fazlasını yapmanıza olanak tanır.
Deponuzu izlemek için herhangi bir noktada herhangi bir aracı kullanabildiğiniz için, bazen denemek veya ara sıra daha az yaygın karmaşık görevleri gerçekleştirmek için bir arabirimi çok kolay bir şekilde kurabileceğinizi ve geri kalan zaman için basitleştirilmiş bir arabirimi tercih edebileceğinizi unutmayın ( örneğin çoğu zaman Github Desktop’ı kullanmak ve bazı özel görevler için SourceTree veya Gitbash’a geçmek).
46.12 Git komutları
Önerilen öğrenim
Etkileşimli bir eğiticide Git komutlarını öğrenmek için bu web sitesine bakabilirsiniz.
Komutların girileceği yer
Git kabuğuna komutlar girersiniz.
Seçenek 1 RStudio’da yeni bir Terminal açabilirsiniz. Bu sekmenin yanında R Konsolu. İçine herhangi bir metin yazamıyorsanız, “Terminal”in altındaki açılır menüye tıklayın ve “Yeni terminal”i seçin. Komutları, dolar işareti “$” önündeki yanıp sönen boşluğa yazın.
Seçenek 2 Git sekmesinde (RStudio Ortamı yakınında) mavi “dişliler” simgesine tıklayarak bir kabuk (komut girmek için bir terminal) de açabilirsiniz. Açılır menüden “Kabuk” öğesini seçin. “$” dolar işaretinden sonra komutları yazabileceğiniz yeni bir pencere açılacaktır.
Seçenek 3 Aynı tür terminali açacak olan “Git Bash burada”yı açmak için sağ tıklayın veya uygulama listenizden Git Bash’i açın [Git Bash hakkında daha fazla başlangıç seviyesi bilgisi (https://happygitwithr.com/shell.html), nasıl bulunur ve ihtiyacınız olacak bazı bash komutları.
Örnek komutlar
Aşağıda birkaç yaygın git komutu sunuyoruz. Bunları kullandığınızda, eylemi değiştireceğinden, hangi dalın aktif olduğunu (check-out) aklınızda bulundurun!
Aşağıdaki komutlarda,
Git komutları | Eylem |
---|---|
git branch <name> |
|
git checkout <name> |
Geçerli dalı |
git checkout -b <name> |
Yeni dal oluşturmak için kısayol * ve * ona geçiş yapın |
git status |
İzlenmeyen değişiklikleri görün |
git add <file> |
Dosyayı aşamalandırma |
git commit -m <message> |
Şu anda aşamalı değişiklikleri mevcut dalda mesajla commit et |
git fetch |
Uzak depodan değişiklikleri getir |
git pull |
Geçerli daldaki uzak depodan değişiklikleri çekin |
git push |
Yerel değişiklikleri uzak dizine itin |
git switch |
Git’te aşamalı olarak kullanılan “git checkout”a bir alternatif |
git merge <name> |
|
git rebase <name> |
Geçerli daldan değişiklikleri |
46.13 Kaynaklar
Bu sayfanın çoğu, Jenny Bryan’ın bu “Happy Git with R” web sitesi çalışmasından faydalanılarak hazırlanmıştır. Bu web sitesinin yaygın Git sorunlarını gidermenize yardımcı olan bölümü ve R ile ilgili hatalara çok yardımcı çözümleri mevcuttur.
Github.com belgeleri ve başlangıç kılavuzu.
RStudio ile Git hakkında ipuçları içeren RStudio “IDE” yardım sayfası.
https://ohi-science.org/news/github-coming-back-in-time
Yeni başlayanlar için Git komutları
Öğrenmek için bir etkileşimli öğretici
https://www.freecodecamp.org/news/an-introduction-to-git-for-absolute-beginners-86fa1d32ff71/: Kendi bilgisayarınızdaki bir klasördeki değişiklikleri izlemek için mutlak temel bilgileri öğrenmek için iyi.
Dalları anlamak için güzel şemalar: https://speakerdeck.com/alicebartlett/git-for-humans>
Hem temel hem de ileri düzey konuları kapsayan eğitimler
https://tutorialzine.com/2016/06/learn-git-in-30-dakika
https://dzone.com/articles/git-tutorial-commands-and-operations-in-git https://swcarpentry.github.io/git-novice/ (kısa kurs <https://rsjakob .gitbooks.io/git/content/chapter1.html>
Pro Git kitabı resmi bir referans olarak kabul edilir. Bazı bölümler iyi olsa da, genellikle biraz teknik. Git’i biraz kullandıktan ve ne olduğunu ve nasıl daha ileri gidileceğini biraz daha kesin olarak öğrenmek istediğinizde muhtemelen iyi bir kaynaktır.