Git neden fazla komplike?

MidI0ck

Kilopat
Katılım
21 Temmuz 2017
Mesajlar
1.579
Çözümler
14
Daha fazla  
Cinsiyet
Erkek
Git özünde çok güzel bir hizmet. Ancak kod push için 2021’de gelen token sistemi bence tam anlamıyla saçmalık. Sürekli olarak o tokeni şifre kısmına girmek mi zorundayız kodu push etmek istediğimiz zaman.

Terminale şifre girerken özellikle visual feedback olmadığı için çoğu zaman o tokeni doğru girip girmediğinizi de anlamıyorsunuz.

Hali hazırda olan bi repomu mesela pull etmek için yine keşke kolay bi komut olsa. Git pull dediğimde repomu sorsa integer şeklinde ve ben istediğim repoyu çekebilsem.

Ben mi kullanamıyorum yoksa gerçekten komplike mi Git? Biraz aydınlatabilir misiniz?

Benim istediğim bi kere bilgilerimi vereyim. Kolayca istediğim gibi pull,push edeyim. Origin için elle GitHub a girip,link sağlamam gerekmesin.

Normalde CLI’ın daha kolay olmasını beklersiniz. Ancak bana direk elle upload file yapmak daha kolay geliyor. Ancak böyle olunca muhtemelen version control özelliği olmuyor. E haliyle bu özellik olmayınca Git’in Google Drive’dan farkı kalmıyor.

@TheAny

Kendi documentationunu okumama rağmen hiçbir şey anlamadım. Biraz fazla komplike anlatmışlar. Branch muhabbeti ne mesela tam olarak?
 
.ssh altinda private key i olusturduktan sonra sen istemezsen sifre girmene hatta token girmene hic gerek yok.
Hocam birkaç sorum var.
1.istediğim gibi repolarımı sıralayıp integer olarak origin verebileceğim hali hazırda bi script var mı?
2.Farklı cihazlarda da bu tokenı ilk sefer için girmem gerekecek değil mi? Yine bununla ilgili Git configimi store eden ve yükleyen bi script var mı?
3.Branch=versiyon mudur yoksa beta,pre beta,full release muhabbeti için mi kullanılıyor?

Not:ben istiyorum ki her şey benle CLI arasında olsun bir daha browser açıp,URL aramak bana düz amelelik geliyor.

Teşekkürler sorular junior tadında her zamanki gibi :)
 
"git remote" komutu gibi bir şey mi arıyorsunuz?

İnternette git cheatsheet tarzı temel komutları basitçe anlatan tutorialler olması lazım, bir kurcalayın.
 
Son düzenleme:
Git özünde çok güzel bir hizmet. Ancak kod push için 2021’de gelen token sistemi bence tam anlamıyla saçmalık. Sürekli olarak o tokeni şifre kısmına girmek mi zorundayız kodu push etmek istediğimiz zaman.

Terminale şifre girerken özellikle visual feedback olmadığı için çoğu zaman o tokeni doğru girip girmediğinizi de anlamıyorsunuz.
Git Credentials diye bir servis var. Kullanmanı tavsiye ederim.

Hali hazırda olan bi repomu mesela pull etmek için yine keşke kolay bi komut olsa. Git pull dediğimde repomu sorsa integer şeklinde ve ben istediğim repoyu çekebilsem.
Cloning ve pull'u mu karıştırıyorsun? Pull local repositorynin gecmisini remote'la eşler. Güncellemeleri çeker, mümkünse mergeler sonra da eşitlemiş olur. Bunun için local repo hakkında bilgisi olması lazım. Ama zoxide gibi bir cd alternatifi kullanırsan, pull yapmak için klasöre girmen bir kaç saniyeni bile almaz. Ek olarak TortoiseGit, GitKraken gibi git clientlara da bakabilirsin. Toplu bir şekilde görmene olanak sağlar.

Cloning için de, valla aklıma bir şey gelmiyor bu işi kısaltacak türden. Ama clone çok yapmıyor olman lazım zaten. Clone'un amacı eğer yoksa proje dosyalarını çekip kaldığın yerden devam edebilmek.

Normalde CLI’ın daha kolay olmasını beklersiniz. Ancak bana direk elle upload file yapmak daha kolay geliyor. Ancak böyle olunca muhtemelen version control özelliği olmuyor. E haliyle bu özellik olmayınca Git’in Google Drive’dan farkı kalmıyor.
Git ve GitHub farklı şeyler. GitHub'ın Google Drive'dan farkı kalmıyordur. Onun içinde dediğim gibi credentials helper vb toollar kullanırsan push pull dert olmaktan çıkar muhtemelen.

Branch=versiyon mudur yoksa beta,pre beta,full release muhabbeti için mi kullanılıyor?
Gibi gibi. Branch, aynı ağaç üzerinde (commit geçmişi), değişikliklerin farklı bölgelere gitmesine deniyor. Lineer değil, paralel geliştirme yapmaya olanak sağlıyor. Böylece bir kişinin yaptığı değişiklikler diğerini rahatsız etmek zorunda kalmıyor. Mesela yeni bir feature eklerken stable'ı yada beta'yı bozmak istemiyorsan, yeni branch açıyor fix'i değişikliği orada yapıyorsun, main/master branch geliştirilmesine devam ederken sende kendininkini geliştiriyorsun, sonrasında merge yaptığınızda senin değişikliklerin ve masterdaki değişiklikler birbirine birleşiyor. Böylece sen kendi değişikliğinin doğru çalıştığından emin olduğunda aktarmış oluyorsun ana ağaca gibi de denebilir. İstersen salt versioning içinde kullanabilirsin.
 
Hocam birkaç sorum var.
1.istediğim gibi repolarımı sıralayıp integer olarak origin verebileceğim hali hazırda bi script var mı?
2.Farklı cihazlarda da bu tokenı ilk sefer için girmem gerekecek değil mi? Yine bununla ilgili Git configimi store eden ve yükleyen bi script var mı?
3.Branch=versiyon mudur yoksa beta,pre beta,full release muhabbeti için mi kullanılıyor?

Not:ben istiyorum ki her şey benle CLI arasında olsun bir daha browser açıp,URL aramak bana düz amelelik geliyor.

Teşekkürler sorular junior tadında her zamanki gibi :)

Rica ederim. Oncelikle kendine SSH key'i olusturmalisin. Doc -> Link
Biz yubico kullaniyoruz ama calisma mantigi benzer.

Bunun public counter-partini Github'a ( diger git servisleri de bu sekilde, bitbucket, gitlab vs ) yuklemelisin.

Boylelikle github senin cihazi secure listeye eklemis oluyor. Diger cihazlarinda da bu islemi yapmalisin eger birden fazla makine kullaniyorsan. ( Ev, is vs )

Daha sonra github'daki istedigin repoyu bu ssh key araciligi ile clone edebilirsin, sifre girmene gerek yok cunku zaten git guvenlik icin senin kullandigin private key-i kullaniyor. Private key'ine ayrica sifre de koymani tavsiye ederim, eger bilgisayarin calinirsa ya da diskteki veriler kopyalanirsa private key i eline geciren birisi senin belirledigin sifre olmadan bunu unlock edemez.

1. soruyu bilmiyorum acikcasi; ben kullanacagim github repolarini bilgisayari kurarken setup ediyorum. git clone hede hodo yaziyorum sadece.

2. soru ustte acikladigim gibi.

3. Branch bir reponun uzerinde degisiklik yapmak amaciyla acilmis fork. Versiyon degil. Bu, ilgili reponun merge stratejisi ne ise ona gore degisir. Cogunlukla yeni bir ozellik ekleyecegin zaman branch olusturur; degisikliklerini yapar sonra da Pull Request ile bunu merge edersin esas repoya. Kafana gore main branch'e commit atmazsin. Ama farkli branch kullanimlari da var, bu da biraz isin mimari kismina giriyor. ( Trunk Based development vs ) Aslinda branch olusturarak kodun aynisini orijinalini degistirmeden "kopyalamis" oluyorsun, bu kadar. ( Buradaki kopya aslinda direkt file-copy degil ama cok detaylandirmayacagim)

Standart kullanimda commit, push, pull, fetch , merge, branch komutlarini isini gorur. Ancak zamanla amend, log, cherry-pick, revert, force push, prune pull, diff --cache vs hepsine ihtiyacin olacak. Git anlamasi basit, uzmanlasmasi zor bir konsept cunku her ihtiyaca yanit verebilmesi icin zamanla cok evrim gecirdi. Eger bir gun yolun silikon vadisine milyonlarca satir kodun bulundugu monorepo'lara duserse goreceksin ki basit bir git status atmak bile 30 sn suruyor CLI uzerinden. O yuzden "Neden basit bir dosya yuklemek icin bu kadar ugrasiyorum" sorusunun cevabi orada; delta hesabi yaptigi icin senin de bu mantikla kavraman gerekiyor kullanimi.
 
Git Credentials diye bir servis var. Kullanmanı tavsiye ederim.


Cloning ve pull'u mu karıştırıyorsun? Pull local repositorynin gecmisini remote'la eşler. Güncellemeleri çeker, mümkünse mergeler sonra da eşitlemiş olur. Bunun için local repo hakkında bilgisi olması lazım. Ama zoxide gibi bir cd alternatifi kullanırsan, pull yapmak için klasöre girmen bir kaç saniyeni bile almaz. Ek olarak TortoiseGit, GitKraken gibi git clientlara da bakabilirsin. Toplu bir şekilde görmene olanak sağlar.

Cloning için de, valla aklıma bir şey gelmiyor bu işi kısaltacak türden. Ama clone çok yapmıyor olman lazım zaten. Clone'un amacı eğer yoksa proje dosyalarını çekip kaldığın yerden devam edebilmek.


Git ve GitHub farklı şeyler. GitHub'ın Google Drive'dan farkı kalmıyordur. Onun içinde dediğim gibi credentials helper vb toollar kullanırsan push pull dert olmaktan çıkar muhtemelen.


Gibi gibi. Branch, aynı ağaç üzerinde (commit geçmişi), değişikliklerin farklı bölgelere gitmesine deniyor. Lineer değil, paralel geliştirme yapmaya olanak sağlıyor. Böylece bir kişinin yaptığı değişiklikler diğerini rahatsız etmek zorunda kalmıyor. Mesela yeni bir feature eklerken stable'ı yada beta'yı bozmak istemiyorsan, yeni branch açıyor fix'i değişikliği orada yapıyorsun, main/master branch geliştirilmesine devam ederken sende kendininkini geliştiriyorsun, sonrasında merge yaptığınızda senin değişikliklerin ve masterdaki değişiklikler birbirine birleşiyor. Böylece sen kendi değişikliğinin doğru çalıştığından emin olduğunda aktarmış oluyorsun ana ağaca gibi de denebilir. İstersen salt versioning içinde kullanabilirsin.

Rica ederim. Oncelikle kendine SSH key'i olusturmalisin. Doc -> Link
Biz yubico kullaniyoruz ama calisma mantigi benzer.

Bunun public counter-partini Github'a ( diger git servisleri de bu sekilde, bitbucket, gitlab vs ) yuklemelisin.

Boylelikle github senin cihazi secure listeye eklemis oluyor. Diger cihazlarinda da bu islemi yapmalisin eger birden fazla makine kullaniyorsan. ( Ev, is vs )

Daha sonra github'daki istedigin repoyu bu ssh key araciligi ile clone edebilirsin, sifre girmene gerek yok cunku zaten git guvenlik icin senin kullandigin private key-i kullaniyor. Private key'ine ayrica sifre de koymani tavsiye ederim, eger bilgisayarin calinirsa ya da diskteki veriler kopyalanirsa private key i eline geciren birisi senin belirledigin sifre olmadan bunu unlock edemez.

1. soruyu bilmiyorum acikcasi; ben kullanacagim github repolarini bilgisayari kurarken setup ediyorum. git clone hede hodo yaziyorum sadece.

2. soru ustte acikladigim gibi.

3. Branch bir reponun uzerinde degisiklik yapmak amaciyla acilmis fork. Versiyon degil. Bu, ilgili reponun merge stratejisi ne ise ona gore degisir. Cogunlukla yeni bir ozellik ekleyecegin zaman branch olusturur; degisikliklerini yapar sonra da Pull Request ile bunu merge edersin esas repoya. Kafana gore main branch'e commit atmazsin. Ama farkli branch kullanimlari da var, bu da biraz isin mimari kismina giriyor. ( Trunk Based development vs ) Aslinda branch olusturarak kodun aynisini orijinalini degistirmeden "kopyalamis" oluyorsun, bu kadar. ( Buradaki kopya aslinda direkt file-copy degil ama cok detaylandirmayacagim)

Standart kullanimda commit, push, pull, fetch , merge, branch komutlarini isini gorur. Ancak zamanla amend, log, cherry-pick, revert, force push, prune pull, diff --cache vs hepsine ihtiyacin olacak. Git anlamasi basit, uzmanlasmasi zor bir konsept cunku her ihtiyaca yanit verebilmesi icin zamanla cok evrim gecirdi. Eger bir gun yolun silikon vadisine milyonlarca satir kodun bulundugu monorepo'lara duserse goreceksin ki basit bir git status atmak bile 30 sn suruyor CLI uzerinden. O yuzden "Neden basit bir dosya yuklemek icin bu kadar ugrasiyorum" sorusunun cevabi orada; delta hesabi yaptigi icin senin de bu mantikla kavraman gerekiyor kullanimi.
Yemin ediyorum iyi ki varsınız. Kimse zahmet edip bu kadar uğraşmaz anlatmak için benim de derdim birazcık profesyonel çalışma yeteneğimi geliştirmeye çalışmak,sistemli çalışmak.

Evet pull ile clone karıştırma olasılığım çok yüksek. Hatta kesinlikle karıştırmışım. Sanırım bu mevzuyu çözdüm gibi.

Son bir mesele sormak istiyorum. Kodumuzda calistik ve son versiyonun tabiri caizse içine ettik. Versiyonları nasıl preview ediyoruz ve eski versiyonu nasıl geri yükleyebiliyoruz. Basitçe her değişimden sonra Git add kullanmadan önce commit atmayı zorunlu hale getiriyor deneyimlediğim kadarıyla. Versiyonlama bu commitler üzerinden mi gerçekleşiyor?

Kusura bakmayın normalde Google’layıp çözülebilecek şeyler için konu açmayı pek seçmem ama kimse açıklayıcı anlatmamış bende veya bende bi salaklık var.
 
Son düzenleme:
Son bir mesele sormak istiyorum. Kodumuzda calistik ve son versiyonun tabiri caizse içine ettik. Versiyonları nasıl preview ediyoruz ve eski versiyonu nasıl geri yükleyebiliyoruz.
git checkout ile yapıyorsun. git checkout HEAD~1 dediğinde bir commit geri atıyor seni. Son commiti silmez ama sadece geri alınmış olursun yani. checkout kullanmadan önce her zaman commitle. Eğer geri dönmek istersen git log --follow dediğinde sana commit geçmişini gösterecek, commit hash'ini alıp checkout <revision_hash> dediğinde o commite geri dönersin.

git diff <revision_hash> sana o committe yapılan değişikliklerin bir listesini gösterir. Hangi spesifik revision'a döneceğini de oradan diffe bakarak seçebilirsin mesela. Yada sadece git log'dan da devam edebilirsin, her iki durumda da spesifik bir revision'a gitmek için checkout <revision_has> yetiyor. İlla HEAD~N demene gerek yok yani. Yine de ikisini de öğrenmiş olursun böylece.

Dikkatli kullan tabi bunları. Yanlış bir hareket ve tüm reponun içinden geçersin.

Örneğin;
1716758096726.png


Mercurial kullanıyorum bayağıdır. hg up <revision> komutuyla geçmiş revision'a gidersin onda. Mercurial'da history kutsaldır, değiştiremezsin. Dolayısıyla geri gidip, değişiklikler yapıp, yeni update'i commitlediğinde, senin bozuk version'un silinmez, üzerine yeni commit eklenir temizlediğin ve düzelttiğin haliyle. Bu da yanlışlıkla ortalığı dağıtmanı engelliyor. Mercurial'da düşünebilirsin kişisel projelerin için. Projene uygun olan, hangisiyse onu seçersin.
 
Son düzenleme:
Son bir mesele sormak istiyorum. Kodumuzda calistik ve son versiyonun tabiri caizse içine ettik. Versiyonları nasıl preview ediyoruz ve eski versiyonu nasıl geri yükleyebiliyoruz. Basitçe her değişimden sonra Git add kullanmadan önce commit atmayı zorunlu hale getiriyor deneyimlediğim kadarıyla. Versiyonlama bu commitler üzerinden mi gerçekleşiyor?
git log ile commitleri listeleyebilirsiniz, git show <commit> ile commitin detayına bakarsınız.
 

Geri
Yukarı