├── .gitignore ├── .mailmap ├── .tgitconfig ├── .travis.yml ├── A-git-in-other-environments.asc ├── B-embedding-git.asc ├── C-git-commands.asc ├── CONTRIBUTING.md ├── Gemfile ├── LICENSE.asc ├── README.asc ├── Rakefile ├── TRANSLATING.md ├── book ├── 01-introduction │ └── sections │ │ ├── about-version-control.asc │ │ ├── command-line.asc │ │ ├── first-time-setup.asc │ │ ├── help.asc │ │ ├── history.asc │ │ ├── installing.asc │ │ └── what-is-git.asc ├── 02-git-basics │ └── sections │ │ ├── aliases.asc │ │ ├── getting-a-repository.asc │ │ ├── recording-changes.asc │ │ ├── remotes.asc │ │ ├── tagging.asc │ │ ├── undoing.asc │ │ └── viewing-history.asc ├── 03-git-branching │ └── sections │ │ ├── basic-branching-and-merging.asc │ │ ├── branch-management.asc │ │ ├── nutshell.asc │ │ ├── rebasing.asc │ │ ├── remote-branches.asc │ │ └── workflows.asc ├── 04-git-server │ └── sections │ │ ├── generating-ssh-key.asc │ │ ├── git-daemon.asc │ │ ├── git-on-a-server.asc │ │ ├── gitlab.asc │ │ ├── gitweb.asc │ │ ├── hosted.asc │ │ ├── protocols.asc │ │ ├── setting-up-server.asc │ │ └── smart-http.asc ├── 05-distributed-git │ └── sections │ │ ├── contributing.asc │ │ ├── distributed-workflows.asc │ │ └── maintaining.asc ├── 06-github │ └── sections │ │ ├── 1-setting-up-account.asc │ │ ├── 2-contributing.asc │ │ ├── 3-maintaining.asc │ │ ├── 4-managing-organization.asc │ │ └── 5-scripting.asc ├── 07-git-tools │ ├── git-credential-read-only │ └── sections │ │ ├── advanced-merging.asc │ │ ├── bundling.asc │ │ ├── credentials.asc │ │ ├── debugging.asc │ │ ├── interactive-staging.asc │ │ ├── replace.asc │ │ ├── rerere.asc │ │ ├── reset.asc │ │ ├── revision-selection.asc │ │ ├── rewriting-history.asc │ │ ├── searching.asc │ │ ├── signing.asc │ │ ├── stashing-cleaning.asc │ │ ├── submodules.asc │ │ └── subtree-merges.asc ├── 08-customizing-git │ └── sections │ │ ├── attributes.asc │ │ ├── config.asc │ │ ├── hooks.asc │ │ └── policy.asc ├── 09-git-and-other-scms │ └── sections │ │ ├── client-bzr.asc │ │ ├── client-hg.asc │ │ ├── client-p4.asc │ │ ├── client-svn.asc │ │ ├── client-tfs.asc │ │ ├── import-bzr.asc │ │ ├── import-custom.asc │ │ ├── import-hg.asc │ │ ├── import-p4.asc │ │ ├── import-svn.asc │ │ └── import-tfs.asc ├── 10-git-internals │ └── sections │ │ ├── environment.asc │ │ ├── maintenance.asc │ │ ├── objects.asc │ │ ├── packfiles.asc │ │ ├── plumbing-porcelain.asc │ │ ├── refs.asc │ │ ├── refspec.asc │ │ └── transfer-protocols.asc ├── A-git-in-other-environments │ └── sections │ │ ├── bash.asc │ │ ├── eclipse.asc │ │ ├── guis.asc │ │ ├── powershell.asc │ │ ├── sublimetext.asc │ │ ├── visualstudio.asc │ │ ├── visualstudiocode.asc │ │ └── zsh.asc ├── B-embedding-git │ └── sections │ │ ├── command-line.asc │ │ ├── dulwich.asc │ │ ├── go-git.asc │ │ ├── jgit.asc │ │ └── libgit2.asc ├── contributors.asc ├── cover.png ├── dedication.asc ├── introduction.asc ├── license.asc ├── preface_ben.asc └── preface_scott.asc ├── ch01-introduction.asc ├── ch02-git-basics.asc ├── ch03-git-branching.asc ├── ch04-git-server.asc ├── ch05-distributed-git.asc ├── ch06-github.asc ├── ch07-git-tools.asc ├── ch08-customizing-git.asc ├── ch09-git-and-other-scms.asc ├── ch10-git-internals.asc ├── diagram-source └── progit.sketch ├── images ├── 2fa-1.png ├── account-settings.png ├── advance-master.png ├── advance-testing.png ├── areas.png ├── avatar-crop.png ├── basic-branching-1.png ├── basic-branching-2.png ├── basic-branching-3.png ├── basic-branching-4.png ├── basic-branching-5.png ├── basic-branching-6.png ├── basic-merging-1.png ├── basic-merging-2.png ├── basic-rebase-1.png ├── basic-rebase-2.png ├── basic-rebase-3.png ├── basic-rebase-4.png ├── benevolent-dictator.png ├── bitnami.png ├── blink-01-start.png ├── blink-02-pr.png ├── blink-03-pull-request-open.png ├── blink-04-email.png ├── blink-04-pr-comment.png ├── blink-05-general-comment.png ├── blink-06-final.png ├── blink-pull-request-open copy.png ├── blink-pull-request-open.png ├── branch-and-history.png ├── branch_widget_mac.png ├── branch_widget_win.png ├── centralized.png ├── centralized_workflow.png ├── checkout-master.png ├── clean.png ├── collaborators.png ├── commit-and-tree.png ├── commits-and-parents.png ├── data-model-1.png ├── data-model-2.png ├── data-model-3.png ├── data-model-4.png ├── deltas.png ├── distributed.png ├── double-dot.png ├── egit.png ├── email-settings.png ├── forkbutton.png ├── git-bash.png ├── git-diff-check.png ├── git-fusion-boot.png ├── git-fusion-perforce-graph.png ├── git-gui.png ├── git-instaweb.png ├── git-osx-installer.png ├── git-tfs-ct.png ├── github_mac.png ├── github_win.png ├── gitk.png ├── gitlab-broadcast.png ├── gitlab-groups.png ├── gitlab-menu.png ├── gitlab-users.png ├── head-to-master.png ├── head-to-testing.png ├── hubot.png ├── integration-manager.png ├── interesting-rebase-1.png ├── interesting-rebase-2.png ├── interesting-rebase-3.png ├── interesting-rebase-4.png ├── interesting-rebase-5.png ├── large-merges-1.png ├── large-merges-2.png ├── lifecycle.png ├── local.png ├── lr-branches-1.png ├── lr-branches-2.png ├── maint-01-email.png ├── maint-02-merge.png ├── maint-03-email-resp.png ├── maint-04-target.png ├── maint-05-mentions.png ├── maint-06-unsubscribe.png ├── maint-07-notifications.png ├── maint-08-notifications-page.png ├── maint-09-contrib.png ├── maint-10-default-branch.png ├── maint-11-transfer.png ├── managed-team-1.png ├── managed-team-2.png ├── managed-team-3.png ├── managed-team-flow.png ├── markdown-01-example.png ├── markdown-02-tasks.png ├── markdown-03-task-summary.png ├── markdown-04-fenced-code.png ├── markdown-05-quote.png ├── markdown-06-emoji-complete.png ├── markdown-07-emoji.png ├── markdown-08-drag-drop.png ├── mentions-01-syntax.png ├── mentions-02-render.png ├── mentions-03-closed.png ├── merging-workflows-1.png ├── merging-workflows-2.png ├── merging-workflows-3.png ├── merging-workflows-4 2.png ├── merging-workflows-4.png ├── merging-workflows-5.png ├── new-repo.png ├── neworg.png ├── newrepo.png ├── newrepoform.png ├── orgs-01-page.png ├── orgs-02-teams.png ├── orgs-03-audit.png ├── p4merge.png ├── perils-of-rebasing-1.png ├── perils-of-rebasing-2.png ├── perils-of-rebasing-3.png ├── perils-of-rebasing-4.png ├── perils-of-rebasing-5.png ├── posh-git.png ├── pr-01-fail.png ├── pr-02-merge-fix.png ├── public-small-1.png ├── public-small-2.png ├── public-small-3.png ├── rebasing-1.png ├── rebasing-2.png ├── remote-branches-1.png ├── remote-branches-2.png ├── remote-branches-3.png ├── remote-branches-4.png ├── remote-branches-5.png ├── replace1.png ├── replace2.png ├── replace3.png ├── replace4.png ├── replace5.png ├── reposettingslink.png ├── rerere1.png ├── rerere2.png ├── rerere3.png ├── reset-checkout.png ├── reset-ex1.png ├── reset-ex2.png ├── reset-ex3.png ├── reset-ex4.png ├── reset-ex5.png ├── reset-ex6.png ├── reset-hard.png ├── reset-mixed.png ├── reset-path1.png ├── reset-path2.png ├── reset-path3.png ├── reset-soft.png ├── reset-squash-r1.png ├── reset-squash-r2.png ├── reset-squash-r3.png ├── reset-start.png ├── reset-workflow.png ├── scripting-01-services.png ├── scripting-02-email-service.png ├── scripting-03-webhook.png ├── scripting-04-webhook-debug.png ├── scripting-05-access-token.png ├── scripting-06-comment.png ├── scripting-07-status.png ├── signup.png ├── small-team-1.png ├── small-team-2.png ├── small-team-3.png ├── small-team-4.png ├── small-team-5.png ├── small-team-6.png ├── small-team-7.png ├── small-team-flow.png ├── smudge.png ├── snapshots.png ├── ssh-keys.png ├── topic-branches-1.png ├── topic-branches-2.png ├── two-branches.png ├── undomerge-reset.png ├── undomerge-revert.png ├── undomerge-revert2.png ├── undomerge-revert3.png ├── undomerge-start.png ├── vs-1.png ├── vs-2.png ├── your-profile.png ├── zsh-oh-my.png └── zsh-prompt.png ├── index.asc └── progit.asc /.gitignore: -------------------------------------------------------------------------------- 1 | output 2 | .DS_Store 3 | 4 | # build artifacts 5 | Gemfile.lock 6 | progit.html 7 | progit.pdf 8 | progit.pdfmarks 9 | progit.epub 10 | progit-kf8.epub 11 | progit.mobi 12 | contributors.txt -------------------------------------------------------------------------------- /.mailmap: -------------------------------------------------------------------------------- 1 | Jean-Noël Avila 2 | Scott Chacon -------------------------------------------------------------------------------- /.tgitconfig: -------------------------------------------------------------------------------- 1 | [bugtraq] 2 | url = https://github.com/progit/progit2/issues/%BUGID% 3 | logregex = "(?:[Cc]lose[sd]?|[Ff]ix(?:e[sd])?|[Rr]esolve[sd]?):?\\s+(?:[Ii]ssues?\\s+#?|#)\\d+(?:(?:,|\\s+and)\\s+(?:[Ii]ssues?\\s+#?|#)\\d+)*\n(\\d+)" 4 | 5 | [tgit] 6 | icon = Pro.ico 7 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | sudo: false 3 | git: 4 | depth: false 5 | cache: bundler 6 | before_install: 7 | - wget https://raw.githubusercontent.com/progit/progit2-pub/master/bootstrap.sh 8 | - sh bootstrap.sh 9 | script: bundle exec rake book:build 10 | after_success: bundle exec rake book:tag 11 | deploy: 12 | provider: releases 13 | file_glob: true 14 | file: 15 | - progit*.epub 16 | - progit*.mobi 17 | - progit*.pdf 18 | skip_cleanup: true 19 | on: 20 | tags: true 21 | api-key: $GITHUB_API_TOKEN 22 | branches: 23 | only: 24 | - master 25 | - /^2\.1(\.\d+)+$/ 26 | 27 | addons: 28 | apt: 29 | packages: 30 | - epubcheck 31 | notifications: 32 | email: 33 | on_success: never 34 | on_failure: always 35 | -------------------------------------------------------------------------------- /A-git-in-other-environments.asc: -------------------------------------------------------------------------------- 1 | [[A-git-in-other-environments]] 2 | [appendix] 3 | == Diğer Ortamlarda Git 4 | 5 | Kitabın tamamını okursanız Git'i komut satırında nasıl kullanacağınız hakkında çok şey öğrenmiş olursunuz. 6 | Yerel dosyalarla çalışabilir, reponuzu ağ üzerinden diğerlerine bağlayabilir ve başkalarıyla etkili bir şekilde çalışabilirsiniz. 7 | Ancak hikaye burada bitmiyor; Git genellikle daha büyük bir ekosistemin parçası olarak kullanılır ve terminal her zaman onunla çalışmanın en iyi yolu değildir. 8 | Şimdi Git'in yararlı olabileceği diğer ortam türlerine ve diğer uygulamaların (sizinki dahil) Git ile birlikte nasıl çalıştığına göz atacağız. 9 | 10 | include::book/A-git-in-other-environments/sections/guis.asc[] 11 | 12 | include::book/A-git-in-other-environments/sections/visualstudio.asc[] 13 | 14 | include::book/A-git-in-other-environments/sections/visualstudiocode.asc[] 15 | 16 | include::book/A-git-in-other-environments/sections/eclipse.asc[] 17 | 18 | include::book/A-git-in-other-environments/sections/sublimetext.asc[] 19 | 20 | include::book/A-git-in-other-environments/sections/bash.asc[] 21 | 22 | include::book/A-git-in-other-environments/sections/zsh.asc[] 23 | 24 | include::book/A-git-in-other-environments/sections/powershell.asc[] 25 | 26 | === Özet 27 | 28 | Günlük işlerinizde kullandığınız araçların içinden Git'in gücünden nasıl yararlanacağınızı ve ayrıca Git repolarına kendi programlarınızdan nasıl erişeceğinizi öğrendiniz. 29 | -------------------------------------------------------------------------------- /B-embedding-git.asc: -------------------------------------------------------------------------------- 1 | [[B-embedding-git-in-your-applications]] 2 | [appendix] 3 | == Git'i Uygulamalarınıza Gömmek 4 | 5 | Uygulamanız geliştiricilere yönelikse, kaynak kontrolüyle entegrasyondan faydalanma ihtimali yüksektir. 6 | Belge düzenleyiciler gibi geliştirici olmayan uygulamalar bile sürüm kontrol özelliklerinden potansiyel olarak yararlanabilir ve Git'in modeli, birçok farklı senaryo için çok iyi çalışır. 7 | 8 | Git'i uygulamanızla entegre etmeniz gerekiyorsa, aslında iki seçeneğiniz vardır: bir shell oluşturup `git` komut satırı programını çağırın veya uygulamanıza bir Git kitaplığı ekleyin. 9 | Burada komut satırı entegrasyonunu ve en popüler gömülebilir Git kitaplıklarından birkaçını ele alacağız. 10 | 11 | include::book/B-embedding-git/sections/command-line.asc[] 12 | 13 | include::book/B-embedding-git/sections/libgit2.asc[] 14 | 15 | include::book/B-embedding-git/sections/jgit.asc[] 16 | 17 | include::book/B-embedding-git/sections/go-git.asc[] 18 | 19 | include::book/B-embedding-git/sections/dulwich.asc[] 20 | 21 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Pro Git (2nd Edition) 2 | 3 | ## Licensing 4 | 5 | By opening a pull request to this repository, you agree to provide your work under the [project license](LICENSE.asc). 6 | Also, you agree to grant such license of your work as is required for the purposes of future print editions to @ben and @schacon. 7 | Should your changes appear in a printed edition, you'll be included in the [contributors list](book/contributors.asc). 8 | 9 | ## Signaling an Issue 10 | 11 | Before signaling an issue, please check that there isn't already a similar one in the bug tracking system. 12 | 13 | Also, if this issue has been spotted on the git-scm.com site, please cross-check that it is still present in the pdf version. 14 | The issue may have already been corrected, but the changes have not been deployed yet. 15 | 16 | ## Small Corrections 17 | 18 | Errata and basic clarifications will be accepted if we agree that they improve the content. 19 | You can also open an issue so we can figure out how or if it needs to be addressed. 20 | 21 | If you've never done this before, the [flow guide](https://guides.github.com/introduction/flow/) might be useful. 22 | 23 | ## Large Rewrites 24 | 25 | Open an issue for discussion before you start. 26 | These changes tend to be very subjective, often only clarifying things for some small percentage of people and it's rarely worth the time to accept them. 27 | Professional copy editors have already reviewed this content multiple times so while you may have somewhat better taste and grammar than we do it's unlikely that your prose is going to be *so* much better that it's worth changing vast swaths of text. 28 | 29 | ## Figures 30 | 31 | The images in this book were generated using [Sketch 3](https://www.sketchapp.com/), with the [included sketchbook file](diagram-source/progit.sketch). 32 | 33 | To add a figure: 34 | 35 | 1. Add a page to the sketchbook. 36 | Try to use the included symbols wherever possible. 37 | 2. Add a "slice" to your page. 38 | Give it a name that matches the destination PNG filename, relative from the root of the source directory. 39 | 3. Make sure your slice is set to export at "800w". 40 | 41 | 42 | ## Translations 43 | 44 | If you would like to contribute to translating Pro Git into your language, take a look at [TRANSLATING.md](TRANSLATING.md). 45 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'rake' 4 | gem 'asciidoctor', '1.5.6.1' 5 | 6 | gem 'json' 7 | gem 'awesome_print' 8 | 9 | gem 'asciidoctor-epub3', :git => 'https://github.com/asciidoctor/asciidoctor-epub3' 10 | gem 'asciidoctor-pdf', '1.5.0.alpha.16' 11 | gem 'asciidoctor-pdf-cjk', '~> 0.1.3' 12 | gem 'asciidoctor-pdf-cjk-kai_gen_gothic', '~> 0.1.1' 13 | 14 | gem 'coderay' 15 | gem 'pygments.rb' 16 | gem 'thread_safe' 17 | gem 'epubcheck-ruby' 18 | gem 'kindlegen' 19 | 20 | gem 'octokit' 21 | gem 'github_changelog_generator', github: 'Furtif/github-changelog-generator' 22 | -------------------------------------------------------------------------------- /LICENSE.asc: -------------------------------------------------------------------------------- 1 | Bu çalışma "the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License" kapsamında lisanslanmıştır. 2 | Bu lisansın bir kopyasını görüntülemek için https://creativecommons.org/licenses/by-nc-sa/3.0 adresini ziyaret edin veya "Creative Commons, PO Box 1866, Mountain View, CA 94042, USA" adresine bir mektup gönderin. 3 | -------------------------------------------------------------------------------- /README.asc: -------------------------------------------------------------------------------- 1 | = Pro Git, 2. Baskı 2 | 3 | Pro Git kitabının ikinci baskısına hoş geldiniz. 4 | 5 | Bu kitabı çevrimiçi olarak şu adreste bulabilirsiniz: https://git-scm.com/book 6 | 7 | İlk baskı gibi, Pro Git'in ikinci baskısı da Creative Commons lisansı altında açık kaynaktır. 8 | 9 | Açık kaynak kullanımının ilk baskısından bu yana birkaç şey değişti. 10 | Öncelikle kitabın metni için Markdown'dan muhteşem Asciidoc formatına geçtik. 11 | 12 | Ayrıca çevirileri İngilizce arşivinin alt dizinleri yerine ayrı arşivlerde tutmaya başladık. 13 | Daha fazla bilgi için: TRANSLATING.md[the translating document] belgesine bakın. 14 | 15 | == Kitabı Oluşturmak İçin 16 | 17 | E-kitap dosyalarını Asciidoctor ile manuel olarak oluşturabilirsiniz. 18 | Aşağıdakileri çalıştırırsanız aslında HTML, Epub, Mobi ve PDF çıktı dosyalarını alabilirsiniz: 19 | 20 | ---- 21 | $ bundle install 22 | $ bundle exec rake book:build 23 | Converting to HTML... 24 | -- HTML output at progit.html 25 | Converting to EPub... 26 | -- Epub output at progit.epub 27 | Converting to Mobi (kf8)... 28 | -- Mobi output at progit.mobi 29 | Converting to PDF... 30 | -- PDF output at progit.pdf 31 | ---- 32 | 33 | == Bir Sorun Hakkında Bilgilendirmek 34 | 35 | Bir soruna işaret etmeden önce lütfen hata takip sisteminde benzer bir sorun olup olmadığını kontrol edin. 36 | 37 | Ayrıca, bu sorun git-scm.com sitesinde tespit edildiyse, lütfen bu repoda halen mevcut olup olmadığını kontrol edin. 38 | Sorun zaten düzeltilmiş ancak değişiklikler henüz uygulanmamış olabilir. 39 | 40 | == Katkıda Bulunmak 41 | 42 | Bir değişiklik yaparak yardımcı olmak isterseniz, şu bağlantıya bir göz atın: CONTRIBUTING.md[contributor's guide]. 43 | -------------------------------------------------------------------------------- /book/01-introduction/sections/about-version-control.asc: -------------------------------------------------------------------------------- 1 | === Sürüm Denetimi 2 | 3 | (((version control))) 4 | 'Sürüm Denetimi' nedir ve neden önemsenmelidir? 5 | Sürüm denetimi, belirli sürümlerin daha sonra çağrılabilmesi için zaman içerisinde bir dosya veya dosya grubundaki değişiklikleri kaydeden bir sistemdir. 6 | Örneğin bu kitapta, sürüm denetimi için yazılım kodları kullanılacaktır fakat sürüm denetimi bilgisayardaki herhangi bir dosya türü için de kullanılabilir. 7 | 8 | Eğer grafik ya da ağ tasarımcı iseniz ve çalıştığınız görüntü ya da tasarımların her bir değişikliklerini tutmak istiyorsanız (ki bu gerçekten istebilecek bir şeydir), Sürüm Denetim Sistemi (VCS: Version Control System) akıllıca bir seçim olacaktır. 9 | Sürüm Denetim Sistemi, seçili dosyaların bir önceki sürüme (bir önceki duruma) döndürülmesi, projenin tamamının bir önceki sürüme döndürülmesi, zaman içerisinde yapılan değişikliklerin karşılaştırılması, probleme neden olabilecek değişikliklerin en son kimin tarafından yapıldığı, kim bir problemden ne zaman bahsetti gibi bir çok işlemin gerçekleştirilebilmesini sağlar. 10 | Genel olarak VKS kullanmak, değişiklik yaptığınız dosyalar üzerinde bir şeyleri berbat ettiğinizde ya da bir şeyleri kaybettiğinizde kolayca geri getirebilmeniz anlamına gelmektedir. 11 | Ayrıca VKS'nin tüm bu özelliklerini çok az bir iş yüküyle elde edersiniz. 12 | 13 | ==== Yerel Sürüm Denetim Sistemleri 14 | 15 | (((version control,local))) 16 | Çoğu insanın sürüm denetim yöntemi, ilgili dosyaları başka bir yere kopyalamaktır (Muhtemelen daha zeki olanları, klasör isimlendirmesinde zaman damgası kullanıyordur). 17 | Bu yaklaşım basit olduğundan çok yaygındır fakat aynı zamanda inanılmaz derecede hataya açık bir yaklaşımdır. 18 | Hangi dizinde bulunduğunuzu unutmak, yanlışlıkla yanlış dosya üzerine yazmak veya istemediğiniz dosyaların üzerine yazmak gibi ihtimallerin gerçekleşmesi çok olasıdır. 19 | 20 | Tüm bu sorunlardan ötürü, uzun zaman önce geliştiriciler, yapılan tüm değişiklikleri gözden geçirilebilir parçalar halinde basit veritabanı üzerinde tutan yerel sürüm denetim sistemlerini geliştirdiler. 21 | 22 | .Yerel sürüm denetimi. 23 | image::images/local.png[Yerel sürüm denetim şeması] 24 | 25 | En popüler VCS araçları RCS adında bir sistemdi, ki kendisi bugün bile hâlâ pek çok bilgisayarda kullanılır. 26 | RCS yama setlerini (dosyalar arasındaki farklılıklar) disk üzerinde özel bir formatta tutarak çalışır; daha sonra tüm yamaları bir araya getirerek herhangi bir zamanda herhangi bir dosyanın nasıl göründüğüne bakarak onu yeniden oluşturabilir. 27 | 28 | ==== Merkezî Sürüm Denetim Sistemleri 29 | 30 | (((version control,centralized))) 31 | İnsanların karşılaştığı bir diğer büyük problemse diğer sistemlerdeki geliştiricilerle iş birliği yapmak zorunda kalmalarıydı. 32 | Bu problemin çözümü olarak Merkezî Sürüm Denetim Sistemleri (CVCS: Central VCS) geliştirildi. 33 | Bu sistemler (CVS, Subversion ve Perforce gibi) bütün sürümlendirilmiş dosyaları barındıran tek bir sunucuya ve o sunucudaki dosyaları tek merkezden sürekli denetleyen istemcilere sahipti. (((CVS)))(((Subversion)))(((Perforce))) 34 | Uzun yıllar boyunca bu sistem, sürüm denetim sistemleri için standart oldu. 35 | 36 | .Merkezî Sürüm Denetimi. 37 | image::images/centralized.png[Merkezî sürüm denetim şeması] 38 | 39 | Bu kurulum yerel VCS'lere kıyasla pek çok avantaj sunar. 40 | Örneğin, projedeki herkes diğer herkesin projede ne yaptığını belli bir ölçüye kadar bilebilir. 41 | Yöneticiler, kimin ne yapabileceği konusunda hassas bir kontrole sahiptir ve bir CVCS'yi yönetmek her istemcideki yerel veritabanlarıyla uğraşmaktan çok daha kolaydır. 42 | 43 | Bununla birlikte bu kurulumun ciddi dezavantajları da vardır. 44 | En bariz olanı merkezi sunucuların tek bir noktaya bağlı olmasıdır. 45 | Eğer o sunucu bir saatliğine çökerse, çöktüğü andan itibaren hiç kimse hiç iş birliği yapamaz veya üzerinde çalışmakta oldukları herhangi bir şeye sürüm değişikliklerini kaydedemezler. 46 | Eğer sunucu veritabanındaki harici disk bozulursa ve düzgün yedekleme yapılmamışsa, kullanıcıların kendi yerel makinelerinde tuttukları anlık durum dışında projenin tüm tarihini ve dosyalarını, yani her şeyi kaybedersiniz. 47 | Yerel VKS'ler de aynı sorundan muzdariptir, projenin tüm tarihini ve dosyalarını tek bir yerde tuttuğunuz sürece, her şeyi kaybetme riskiniz vardır. 48 | 49 | ==== Dağıtık Sürüm Denetim Sistemleri 50 | 51 | (((version control,distributed))) 52 | İşte tam da burada devreye Dağıtık Sürüm Denetim Sistemleri (DVCS: Distributed VCS) giriyor. 53 | Bir DVCS'de (Git, Mercurial, Bazaar ya da Darcs gibi) istemciler sadece dosyaların son anlık görünümünü denetlemezler, daha çok repoyu reponun tam tarihiyle birlikte yansıtırlar. 54 | Dolayısıyla eğer herhangi bir sunucu devre dışı kalırsa, birbiriyle o sunucu aracılığıyla iş birliği yapan sistemlerdeki herhangi bir istemci reposu sunucuyu yenilemek için geri yüklenebilir. 55 | Her klon, en nihayetinde tüm verilerin tam bir yedeğidir aslında. 56 | 57 | .Dağıtık sürüm denetimi. 58 | image::images/distributed.png[Dağıtık sürüm denetim şeması] 59 | 60 | Ayrıca bu sistemlerin çoğu birden çok uzak repoyla çalışmayı rahatlıkla kaldırabilir, o yüzden farklı gruplardan insanlarla farklı yollarla eş zamanlı bir şekilde rahatlıkla iş birliği yapabilirsiniz. 61 | Bu da size hiyerarşik model gibi merkezi sistemlerde yapması mümkün olmayan birden çok iş akışı şekli tanımlama ve kullanma olanağı sağlar. 62 | -------------------------------------------------------------------------------- /book/01-introduction/sections/command-line.asc: -------------------------------------------------------------------------------- 1 | === Komut Satırı 2 | 3 | Git'i kullanmanın pek çok farklı yolu vardır. 4 | Orijinal komut-satırlarının yanında, birbirinden çok farklı yeteneklere sahip görsel kullanıcı arayüzleri de vardır. 5 | Bu kitapta Git'i komut satırı üzerinden kullanacağız. 6 | Özellikle bilmeniz gereken şey ise, komut satırında __tüm__ Git komutlarını çalıştırabiliyor olmanızdır. Çoğu GUI (Graphical User Interface: görsel kullanıcı arayüzü) sadelik için Git'in fonksiyonlarının sadece belli başlı, küçük bir kısmını kullanmaya izin verir. 7 | 8 | Eğer komut satırını nasıl çalıştıracağınızı biliyorsanız muhtemelen GUI'nin nasıl çalıştırılabileceğini de bulabilirsiniz. Ancak bu durumun tersi her zaman geçerli olmayabilir. 9 | Ayrıca kullanacağınız görsel istemci her ne kadar sizin kişisel zevkinize bağlı olsa da, __bütün__ kullanıcılar komut satırı araçlarını yüklemiş ve kullanmaya hazır durumda tutuyor olmalı. 10 | 11 | O yüzden sizden macOS'daki Terminal'i ya da Windows'taki Komut İstemi'ni veya PowerShell'i nasıl açacağınızı biliyor olmanızı bekliyoruz. 12 | Eğer neyden bahsettiğimizden bihaberseniz, burada biraz ara verip bu konuda araştırma yapıp kitabı öyle okumanızı öneririz. Aksi takdirde kitabın devamındaki açıklamaları ve örnekleri anlayamayabilirsiniz. 13 | -------------------------------------------------------------------------------- /book/01-introduction/sections/help.asc: -------------------------------------------------------------------------------- 1 | [[_git_help]] 2 | === Yardım Almak 3 | 4 | Eğer Git kullanırken yardıma ihtiyacınız olursa, kapsamlı kullanım kılavuzuna erişmenizi sağlayacak birbirine denk üç yol vardır: 5 | 6 | [source,console] 7 | ---- 8 | $ git help 9 | $ git --help 10 | $ man git- 11 | ---- 12 | 13 | Örneğin, `git config` komutunun kullanım kılavuzu kısmına erişmek için şu komutu çalıştırabilirsiniz: (((git commands, help))) 14 | 15 | [source,console] 16 | ---- 17 | $ git help config 18 | ---- 19 | Bu komutların en güzel yanı, çevrimdışı olsanız bile onlara her yerden ve her koşulda erişebiliyor olmanız. 20 | 21 | Eğer kullanım kılavuzu ve bu kitap sizin için yeterli değilse ve birebir yardıma ihtiyacınız varsa, https://freenode.net[] adresinde bulunan Freenode IRC sunucusundaki `#git` ya da `#github` kanallarından bizzat yardım alabilirsiniz. 22 | Bu kanallar çoğunlukla Git hakkında epey bilgili ve size yardıma açık olan yüzlerce insanla doludur.(((IRC))) 23 | 24 | Ek olarak eğer kullanım kılavuzunun tamamına ihtiyaç duymuyor, onun yerine sadece Git komutu olarak kullanılabilen komutlara erişmek istiyorsanız, daha kısa ve öz olan ``help`` çıktısını `-h` ya da `--help` seçenekleriyle çalıştırabilirsiniz. 25 | 26 | [source,console] 27 | ---- 28 | $ git add -h 29 | usage: git add [] [--] ... 30 | 31 | -n, --dry-run dry run 32 | -v, --verbose be verbose 33 | 34 | -i, --interactive interactive picking 35 | -p, --patch select hunks interactively 36 | -e, --edit edit current diff and apply 37 | -f, --force allow adding otherwise ignored files 38 | -u, --update update tracked files 39 | --renormalize renormalize EOL of tracked files (implies -u) 40 | -N, --intent-to-add record only the fact that the path will be added later 41 | -A, --all add changes from all tracked and untracked files 42 | --ignore-removal ignore paths removed in the working tree (same as --no-all) 43 | --refresh don't add, only refresh the index 44 | --ignore-errors just skip files which cannot be added because of errors 45 | --ignore-missing check if - even missing - files are ignored in dry run 46 | --chmod (+|-)x override the executable bit of the listed files 47 | ---- 48 | 49 | -------------------------------------------------------------------------------- /book/01-introduction/sections/history.asc: -------------------------------------------------------------------------------- 1 | === Git'in Kısa Tarihçesi 2 | 3 | Hayattaki harika olan diğer pek çok şey gibi, Git de yaratıcı yıkım ve ateşli tartışmaların sonucunda ortaya çıktı. 4 | 5 | Linux kerneli oldukça geniş bir kapsama sahip bir açık kaynaklı yazılım projesidir.(((Linux))) 6 | Linux çekirdeğinin bakım süresinin büyük bir kısmında (1991-2002) yapılan değişiklikler, yamalar ve arşivlenmiş dosyalarla aktarıldı. 7 | 2002 yılında Linux kernel projesi tescilli bir dağıtık sürüm denetim sistemi olan Bitkeeper'i kullanmaya başladı. 8 | 9 | 2005 yılında Linux çekirdeğini geliştiren toplulukla Bitkeeper'i geliştirmiş olan ticari şirket arasındaki ilişkiler koptu ve o zamana kadar ücretsiz olan Bitkeeper'in dağıtık sürüm denetim sistemi artık ücretli hale geldi. 10 | 11 | Bu da Linux'u geliştiren topluluğun (özellikle Linux'un yaratıcısı olan Linus Torvalds'ın) Bitkeeper'i kullanırken edindiği deneyimler üzerinden kendi dağıtık sürüm denetim sistemini geliştirmek istemesine sebep oldu.(((Linus Torvalds))) 12 | 13 | Geliştirilecek olan yeni sistemin bazı hedefleri şunlardı: 14 | 15 | * Hız 16 | * Minimal tasarım 17 | * Doğrusal olmayan geliştirme için güçlü destek (binlerce paralel dal desteği) 18 | * Tamamen dağıtık olması 19 | * Devasa projeleri (hız ve veri büyüklüğü açısından) Linux çekirdeği verimliliğinde destekleyebilmesi 20 | 21 | 2005 yılında ortaya çıkışından beri Git, kullanımı kolay olacak şekilde hem evrilip hem de olgunlaşmasına rağmen, ilk baştaki hedeflerini ve özelliklerini koruyabildi. 22 | Müthiş derecede hızlı, devasa projelerde bile inanılmaz ölçüde verimli ve doğrusal olmayan geliştirme için harika bir dallanma sistemine sahip. 23 | (Daha fazlası için: <>) 24 | -------------------------------------------------------------------------------- /book/02-git-basics/sections/aliases.asc: -------------------------------------------------------------------------------- 1 | [[_git_aliases]] 2 | === Komut Kısayolu (Alias) Ayarlama 3 | 4 | (((aliases))) 5 | Temel Git ile ilgili bu bölümü bitirmeden önce Git deneyiminizi daha basit, daha kolay ve daha tanıdık hale getirebilecek küçük bir ipucu vereceğiz: komut kısayolları. 6 | Bu kitapta kısayol konusuna detaylıca girmeyeceğiz veya ilerleyen bölümlerde bunları kullandığınızı varsaymayacağız, ancak yine de nasıl kullanacağınızı bilmenizde fayda var. 7 | 8 | Eğer komutunuzun tamamını yazmazsanız, Git bir kısaltma yaptığınızı otomatik olarak anlayamaz. 9 | Git komutlarının tamamını uzun uzun yazmak istemiyorsanız, `git config` komutunu kullanarak, dilediğiniz komut için kolaylıkla bir kısayol ayarlayabilirsiniz.(((git commands, config))) 10 | Aşağıda kısayol olarak atamak isteyebileceğiniz birkaç örnek verilmiştir: 11 | 12 | [source,console] 13 | ---- 14 | $ git config --global alias.co checkout 15 | $ git config --global alias.br branch 16 | $ git config --global alias.ci commit 17 | $ git config --global alias.st status 18 | ---- 19 | 20 | İlk örnekte `git commit` yerine `git ci` komutunu ayarlıyorsunuz. Artık `git ci` yazarsanız Git bunu `git commit` olarak düşünecektir. 21 | Git'i kullanmaya devam ettikçe muhtemelen diğer komutları da sıklıkla kullanacaksınız. Yeni kısayollar oluşturmaktan çekinmeyin. 22 | 23 | Bu tekniği aynı zamanda Git'te mevcut olmayan, ama olması gerektiğini düşündüğünüz komutların oluşturulmasında da kullanabilirsiniz. 24 | Örneğin, bir dosyayı izlemden (stage) kaldırırken karşılaştığınız "kullanılabilirlik" sorununu düzeltmek için Git'e kendi izlemden kaldırma komutunuzu ekleyebilirsiniz: 25 | 26 | [source,console] 27 | ---- 28 | $ git config --global alias.unstage 'reset HEAD --' 29 | ---- 30 | 31 | Bu yeni tanımlanan komut, aşağıdaki iki komutun işini tek başına yapacaktır. 32 | 33 | [source,console] 34 | ---- 35 | $ git unstage fileA 36 | $ git reset HEAD -- fileA 37 | ---- 38 | 39 | Böylesi daha temiz görünüyor. 40 | Bir `last` komutu eklemek de çok yaygındır. 41 | Şunun gibi: 42 | 43 | [source,console] 44 | ---- 45 | $ git config --global alias.last 'log -1 HEAD' 46 | ---- 47 | 48 | Böylelikle son işlemi kolayca görebilirsiniz: 49 | 50 | [source,console] 51 | ---- 52 | $ git last 53 | commit 66938dae3329c7aebe598c2246a8e6af90d04646 54 | Author: Josh Goebel 55 | Date: Tue Aug 26 19:48:51 2008 +0800 56 | 57 | test for current head 58 | 59 | Signed-off-by: Scott Chacon 60 | ---- 61 | 62 | Gördüğünüz gibi Git, yeni komutu her neyin kısayolu olarak ayarlarsanız onunla değiştirir. 63 | Ancak Git alt komutları yerine, harici bir komut da çalıştırmak isteyebilirsiniz. 64 | Bu durumda komuta `!` karakteriyle başlamalısınız. 65 | Eğer Git'te çalışan kendi komutlarınızı yazmak istiyorsanız bu epey kullanışlıdır. 66 | Hadi `git visual` komutunu çalıştıracak `gitk` kısayolunu atamayı gösterelim: 67 | 68 | [source,console] 69 | ---- 70 | $ git config --global alias.visual '!gitk' 71 | ---- 72 | -------------------------------------------------------------------------------- /book/02-git-basics/sections/getting-a-repository.asc: -------------------------------------------------------------------------------- 1 | Git'e başlamak için yalnızca bir bölüm okuyabilecek vaktiniz varsa, işte bu aradığınız bölümdür. 2 | Bu bölüm, Git'te zamanınızı harcayacağınız şeylerin büyük çoğunluğunu yapmak için ihtiyacınız olan tüm temel komutları kapsar. 3 | Bölümün sonunda, bir Git reposunu yapılandırıp başlatabilmeniz, dosyaları izlemeyi başlatıp durdurabilmeniz ve değişikliklerinizi izleme alıp (stage) uzak repoya kaydedebilecek seviyeye geleceksiniz. 4 | Ayrıca Git'i belirli dosyaları ve dosya kalıplarını yok sayacak şekilde nasıl ayarlayacağınızı, hataları hızlı ve kolay bir şekilde nasıl geri alacağınızı, projenizin geçmişine nasıl göz atacağınızı, katkılar (commit) arasındaki değişiklikleri nasıl görüntüleyeceğinizi ve uzak repolarla nasıl kod alışverişi yapacağınızı göstereceğiz. 5 | 6 | 7 | [[_getting_a_repo]] 8 | === Bir Git Reposu Oluşturma/Kopyalama 9 | 10 | Tipik olarak bir Git reposu oluşturmanın 2 yolu vardır: 11 | 12 | 1. Şu anda sürüm denetimi (version control) altında olmayan bir yerel dizini (dosya yolu) alabilir ve onu bir Git reposuna dönüştürebilirsiniz. 13 | Veya 14 | 2. Başka bir yerden, var olan bir Git reposunu kopyalayabilirsiniz. 15 | 16 | Her iki durumda da, yerel makinenizde çalışmaya hazır bir Git reposuna sahip olursunuz. 17 | 18 | ==== Varolan Bir Dizinde Repo Başlatma 19 | 20 | Eğer şu anda sürüm denetimi altında olmayan bir proje diziniz varsa ve onu Git ile takip etmeye başlamak istiyorsanız, önce o projenin dizinine gitmeniz gerekmektedir. 21 | Eğer bunu daha önce yapmadıysanız, hangi işletim sisteminde çalıştığınıza bağlı olarak proje dizininiz farklı görünebilir. 22 | 23 | Linux için: 24 | [source,console] 25 | ---- 26 | $ cd /home/user/my_project 27 | ---- 28 | macOS için: 29 | [source,console] 30 | ---- 31 | $ cd /Users/user/my_project 32 | ---- 33 | Windows için: 34 | [source,console] 35 | ---- 36 | $ cd /c/user/my_project 37 | ---- 38 | 39 | Proje dizinine girdikten sonra şunu yazın: 40 | 41 | [source,console] 42 | ---- 43 | $ git init 44 | ---- 45 | 46 | Bu, tüm gerekli repo dosyalarını içeren `.git` adında yeni bir alt dizin oluşturur (Yani bir Git repo temeli). 47 | Bu aşamada, projenizde henüz takip edilen bir şey yoktur. 48 | (Yeni oluşturduğunuz `.git` dizininde hangi dosyaların bulunduğuna dair daha fazla bilgi edinmek için <> bölümüne bakabilirsiniz.)(((git commands, init))) 49 | 50 | Eğer halihazırda mevcut olan dosyaları sürüm denetimine almak istiyorsanız, boş bir dizin yerine, bu hazır dosyaları takip etmeye başlamalı ve bir 'initial commit' (ilk katkı) yapmalısınız. 51 | Bunu, takip etmek istediğiniz dosyaları belirten birkaç `git add` komutu ve ardından bir `git commit` komutu ile başarabilirsiniz: 52 | 53 | [source,console] 54 | ---- 55 | $ git add *.c 56 | $ git add LICENSE 57 | $ git commit -m 'initial project version' 58 | ---- 59 | 60 | Bu komutların ne yaptığını birazdan inceleyeceğiz. 61 | Bu aşamada, takip edilen dosyaları içeren bir Git reponuz ve başlangıç 'initial commit'iniz vardır. 62 | 63 | [[_git_cloning]] 64 | ==== Mevcut bir Git Reposunu Kopyalama (Klonlama) 65 | 66 | Mevcut bir Git deposunun (örneğin katkıda bulunmak istediğiniz bir projenin) bir kopyasını almak istiyorsanız `git clone` komutunu kullanmalısınız. 67 | Eğer Subversion veya benzeri diğer VCS sistemlerine aşina iseniz, "checkout" yerine "clone" komutu kullanıldığını fark edeceksiniz. 68 | Bu önemli bir ayrımdır! Zira Git, yalnızca çalışan bir kopya almak yerine, sunucunun sahip olduğu neredeyse tüm verilerin tam bir kopyasını alır. 69 | `git clone` komutunu çalıştırdığınızda, projenin geçmişindeki her dosyanın her sürümü varsayılan olarak indirilir. 70 | Aslında, sunucu diskiniz bozulursa, sunucuyu kopyalandığı zamanki durumuna geri döndürmek için herhangi bir istemcideki kopyaların neredeyse tümünü kullanabilirsiniz (bazı sunucu tarafı kancalarını vb. kaybedebilirsiniz, ancak sürümlendirilmiş tüm verilere sahip olacaksınız. 71 | Daha fazla ayrıntı için: <>). 72 | 73 | Bir repoyu `git clone ` komutu ile kopyalayabilirsiniz.(((git commands, clone))) 74 | Örneğin, "libgit2" adlı Git'e bağlanabilir kitaplığı kopyalamak istiyorsanız bunu şu şekilde yapabilirsiniz: 75 | 76 | [source,console] 77 | ---- 78 | $ git clone https://github.com/libgit2/libgit2 79 | ---- 80 | 81 | Bu, içinde bir '.git' dizini olan 'libgit2' adında bir dizin oluşturur, bu repoya ait tüm verileri çeker ve en son sürümün çalışan bir kopyasını alır. 82 | Yeni oluşturulan `libgit2` dizinine giderseniz, orada üzerinde çalışılmaya veya kullanılmaya hazır proje dosyalarını görebilirsiniz. 83 | 84 | Repoyu 'libgit2' dışında bir isimle adlandırılan bir dizine kopyalamak istiyorsanız, yeni dizin adını ek bir argüman olarak belirtebilirsiniz: 85 | 86 | [source,console] 87 | ---- 88 | $ git clone https://github.com/libgit2/libgit2 mylibgit 89 | ---- 90 | 91 | Bu komut öncekiyle aynı şeyi yapar, ancak hedef dizine `mylibgit` adını verir. 92 | 93 | Git'te kullanabileceğiniz bir dizi farklı aktarım protokolü vardır. 94 | Önceki örnekte `https://` protokolü kullanılmıştır ancak `git://` veya SSH aktarım protokolünü kullanan `user@server:path/to/repo.git` ifadelerini de görebilirsiniz. 95 | <> bölümünde sunucunun Git reponuza erişmek için ayarlayabileceği mevcut tüm seçenekleri ve her birinin artılarını ve eksilerini göreceksiniz. 96 | -------------------------------------------------------------------------------- /book/03-git-branching/sections/branch-management.asc: -------------------------------------------------------------------------------- 1 | [[_branch_management]] 2 | === Dal Yönetimi 3 | 4 | (((branches, managing))) 5 | Şu ana kadar birkaç dal oluşturduk, birleştirdik ve sildik. Şimdi de sürekli olarak dalları kullanmaya başladığınızda işinize yarayacak bazı dal yönetimi araçlarına bakalım. 6 | 7 | `git branch` komutu, sadece dallar oluşturmak ve silmekle kalmaz.(((git commands, branch))) 8 | Eğer hiç argüman vermeden çalıştırırsanız, mevcut dallarınızın basit bir listesini de elde edersiniz: 9 | 10 | [source,console] 11 | ---- 12 | $ git branch 13 | iss53 14 | * master 15 | testing 16 | ---- 17 | 18 | `master` dalının önünde yer alan `*` karakterine dikkat edin: bu, şu anda üzerinde çalıştığını (yani, `HEAD` 'in işaret ettiği) dalı gösterir. 19 | Bu, eğer şimdi bir katkı işlerseniz `master` dalının yeni çalışmanızla birlikte ileri taşınacağı anlamına gelir. 20 | Her bir dalın son katkısını görmek için `git branch -v` komutunu çalıştırabilirsiniz: 21 | 22 | [source,console] 23 | ---- 24 | $ git branch -v 25 | iss53 93b412c fix javascript issue 26 | * master 7a98805 Merge branch 'iss53' 27 | testing 782fd34 add scott to the author list in the readmes 28 | ---- 29 | 30 | Kullanışlı `--merged` ve `--no-merged` seçenekleri bu listeyi, şu anda üzerinde bulunduğunuz dala zaten birleştirdiğiniz veya henüz birleştirmediğiniz dallara filtreleyebilir. 31 | Şu anda üzerinde bulunduğunuz dal içine zaten birleştirilmiş olan dalları görmek için `git branch --merged` komutunu çalıştırabilirsiniz: 32 | 33 | [source,console] 34 | ---- 35 | $ git branch --merged 36 | iss53 37 | * master 38 | ---- 39 | 40 | Daha önce `iss53` dalını zaten birleştirdiğiniz için, bu dalı listenizde görüyorsunuz. 41 | Bu listede yer alıp önünde `*` olmayan dalları `git branch -d` ile silmek genellikle güvenlidir. 42 | Çünkü zaten bu dallardaki çalışmayı başka bir dala dahil ettiniz ve onları silmek veri kaybına yol açmayacak. 43 | 44 | Henüz birleştirmediğiniz bir çalışmayı içeren tüm dalları görmek için `git branch --no-merged` komutunu çalıştırabilirsiniz: 45 | 46 | [source,console] 47 | ---- 48 | $ git branch --no-merged 49 | testing 50 | ---- 51 | 52 | Bu son komut başka bir dalınızı gösteriyor. 53 | Henüz birleştirilmemiş bir çalışmayı içerdiği için `git branch -d` ile silmeye çalışmak başarısız olacaktır: 54 | 55 | [source,console] 56 | ---- 57 | $ git branch -d testing 58 | error: The branch 'testing' is not fully merged. 59 | If you are sure you want to delete it, run 'git branch -D testing'. 60 | ---- 61 | 62 | Eğer gerçekten de dalı silmek ve bu çalışmayı kaybetmek istiyorsanız, yardımcı mesajda belirtildiği gibi Git'i `-D` bayrağıyla dalı silmeye zorlayabilirsiniz. 63 | 64 | [TIP] 65 | ==== 66 | Eğer bir katkı veya dal adı verilmezse, yukarıda açıklanan seçenekler, sırasıyla _şu anki dala_ (`--merged` kullanılırsa) birleştirilmiş veya (`--no-merged` kullanılırsa) birleştirilmemiş olan dalları gösterir. 67 | 68 | Dilediğiniz zaman, sadece ek bir argüman girerek, başka bir dala geçiş yapmaksızın o dalın birleştirme durumu hakkında sorgu yazabilirsiniz. Örneğin `master` dala neler birleştirilmemiş gibi: 69 | 70 | [source,console] 71 | ---- 72 | $ git checkout testing 73 | $ git branch --no-merged master 74 | topicA 75 | featureB 76 | ---- 77 | ==== 78 | -------------------------------------------------------------------------------- /book/03-git-branching/sections/workflows.asc: -------------------------------------------------------------------------------- 1 | === İş Akışı Dallandırması 2 | 3 | Artık dallandırma ve birleştirmenin temellerini öğrendiğinize göre bunlarla ne yapabilirsiniz? 4 | Bu bölümde, bu hafif dallandırma ile mümkün olan bazı yaygın iş akışlarını ele alacağız, böylece bunları kendi geliştirme döngünüze dahil edip etmek istemediğinize karar verebilirsiniz. 5 | 6 | ==== Uzun Ömürlü (long-running) Dallar 7 | 8 | (((branches, long-running))) 9 | Git, basit bir üçlü birleştirmeyi kullandığı için, bir daldan diğerine uzun bir süre boyunca birden fazla kez birleştirme yapmak genellikle kolaydır. 10 | Bu, her zaman açık olan ve geliştirme döngünüzün farklı aşamalarında kullanabileceğiniz birkaç dalınız olabileceği anlamına gelir; bunlardan bazılarını düzenli olarak diğerlerine birleştirebilirsiniz. 11 | 12 | Birçok Git geliştiricisi, bu yaklaşımı benimseyen bir iş akışına sahiptir. 13 | Örneğin, `master` dallarında hatasız çalışan (muhtemelen yayımlanmış veya yayımlanacak) dengeli (stabil) kodu bulundurabilirler. 14 | Bunun yanında üzerinde çalışmak veya düzgün çalıştığını test etmek amacıyla `develop` veya `next` adında başka bir paralel dalları daha vardır. Bunların her zaman dengeli olması gerekmez, ancak kararlı (hatasız çalışan) bir duruma geldiğinde `master` dalına birleştirilebilir. 15 | Bu dal, daha altta yer alan konu dallarını (önceki `iss53` dalı gibi kısa ömürlü dalları) içeri çekmek için kullanılır; hazır olduklarında yani tüm testleri geçip hata vermediklerinde ana dala (master veya main) birleştirilir. 16 | 17 | Aslında bahsettiğimiz şey, işlediğiniz katkı çizgisinde yukarı yönlü hareket eden işaretçilerdir. 18 | Dengeli dallar, katkı geçmişinizde daha aşağıda yer alırken, en güncel dallar geçmişin daha yukarısındadır. 19 | 20 | .dengeli-ilerleme (progressive-stability) yaklaşımının doğrusal görüntüsü 21 | image::images/lr-branches-1.png[dengeli-ilerleme (progressive-stability) yaklaşımının doğrusal görüntüsü.] 22 | 23 | Genellikle, bunları iş kuleleri (work silo) olarak düşünmek daha kolaydır, burada katkı grupları tamamen test edildiğinde daha dengeli bir yapıya eklenir. 24 | 25 | [[lrbranch_b]] 26 | .dengeli-ilerleme (progressive-stability) yaklaşımının kule görüntüsü 27 | image::images/lr-branches-2.png[dengeli-ilerleme (progressive-stability) yaklaşımının kule görüntüsü.] 28 | 29 | Bu yaklaşımı farklı denge seviyelerinde sürdürebilirsiniz. 30 | Bazı büyük projeler, henüz `next` veya `master` dallarına bütünleşmeye hazır olmayan birleşik dalları içeren bir `proposed` veya `pu` (proposed updates) dalına sahiptir. 31 | Temel fikir, dallarınızın çeşitli denge düzeylerinde olmasıdır; daha kararlı bir düzeye ulaştıklarında, bir üstlerindeki dala birleştirilirler. 32 | Tekrar belirtmek gerekirse, birden çok uzun ömürlü dala sahip olmak zorunlu değildir, ancak özellikle çok büyük veya karmaşık projelerle uğraşılıyorsa genellikle faydalı olur. 33 | 34 | [[_topic_branch]] 35 | ==== Tematik Dallar 36 | 37 | (((branches, topic))) 38 | Ancak, tematik dallar (topic branch) herhangi bir boyuttaki projelerde faydalıdır. 39 | Bir tematik dal, yalnızca belirli bir özellik veya ilgili çalışma için oluşturduğunuz kısa ömürlü bir şubedir. 40 | Bu genellikle dalı oluşturmak ve birleştirmek çok maliyetli olduğu için bir sürüm kontrol sistemiyle daha önce muhtemelen yapmadığınız bir şeydir. 41 | Ancak Git'te bir günde birkaç kez dal oluşturmak, üzerinde çalışmak, birleştirmek ve silmek yaygındır. 42 | 43 | Bunu, oluşturduğunuz `iss53` ve `hotfix` dalları ile bir önceki bölümde gördünüz. 44 | Bu dallarda birkaç katkı işlediniz ve onları ana dalınıza birleştirdikten hemen sonra sildiniz. 45 | Bu teknik, hızlı ve tam bir bağlam değişimi sağlar. Çünkü çalışmanız, tüm değişikliklerin o konuyla ilgili olduğu dallara ayrılmış durumda, böylece kod incelemesi ve benzeri durumlarda neler olduğunu görmek daha kolaydır. 46 | Değişiklikleri orada dakikalarca, günlerce veya aylarca tutabilir ve hazır olduklarında (oluşturuldukları veya üzerinde çalışıldıkları sıraya bakılmaksızın) birleştirebilirsiniz. 47 | 48 | Örnek olarak, `master` dalı üzerinde çalışıyorsunuz, bir sorunu çözmek için `iss91` dalını oluşturuyorsunuz, bir süre üzerinde çalıştıktan sonra aynı şeyi başka bir şekilde ele almak için `iss91v2` adlı ikinci bir dal oluşturuyorsunuz, `master` dalına geri dönüyorsunuz ve bir süre orada çalıştıktan sonra, belki de iyi bir fikir olup olmadığından emin olmadığınız bir iş üzerinde çalışmak için oradan da `dumbidea` dalını açıyorsunuz. 49 | Katkı geçmişiniz şuna benzer bir görünüme sahip olacak: 50 | 51 | .Çoklu Tematik Dallar 52 | image::images/topic-branches-1.png[Çoklu Tematik Dallar.] 53 | 54 | Şimdi, diyelim ki sorununuza en iyi çözümün `iss91v2` olduğuna karar verdiniz; ve `dumbidea` dalını iş arkadaşlarınıza gösterdiğinizde bunun aslında çok parlak bir fikir olduğu ortaya çıktı. 55 | Orijinal `iss91` dalını (`C5` ve `C6` katkılarını kaybederek) çöpe atabilir ve diğer iki dalı birleştirebilirsiniz. 56 | O zaman geçmişiniz şöyle görünecek: 57 | 58 | .Birleştirme sonrası `dumbidea` ve `iss91v2` geçmişi 59 | image::images/topic-branches-2.png[Birleştirme sonrası `dumbidea` ve `iss91v2` geçmişi.] 60 | 61 | Git projeniz için çeşitli olası iş akışları hakkında daha fazla detaya <> bölümünde gireceğiz. 62 | Bu nedenle bir sonraki projenizde hangi dallandırma şemasını kullanacağınıza karar vermeden önce bahsi geçen bölümü okuduğunuzdan emin olun. 63 | 64 | Bunları yaparken önemli olan, tüm bu dalların tamamen yerel olduğunu hatırlamaktır. 65 | Dallandırma ve birleştirme işlemleri yaparken, her şey yalnızca kendi Git repo dosyanızda gerçekleşir ve sunucu ile iletişim yoktur." 66 | -------------------------------------------------------------------------------- /book/04-git-server/sections/generating-ssh-key.asc: -------------------------------------------------------------------------------- 1 | [[_generate_ssh_key]] 2 | === SSH Ortak Anahtarınızı Oluşturma 3 | 4 | (((SSH keys))) 5 | Birçok Git sunucusu, kullanıcı kimliklerini SSH ortak anahtarları ile doğrular. 6 | Bir ortak anahtar elde etmek için, sistemdeki ortak anahtarı olmayan her kullanıcının, bir adet oluşturması gerekir. 7 | Bu süreç tüm işletim sistemlerinde benzerdir. 8 | İlk olarak, zaten bir anahtarınızın olup olmadığını kontrol etmelisiniz. 9 | Varsayılan olarak, bir kullanıcının SSH anahtarları, kullanıcının `~/.ssh` dizininde depolanır. 10 | Bu dizine gidip içeriği listeleyerek zaten bir anahtarınız olup olmadığını kolayca kontrol edebilirsiniz: 11 | 12 | [source,console] 13 | ---- 14 | $ cd ~/.ssh 15 | $ ls 16 | authorized_keys2 id_dsa known_hosts 17 | config id_dsa.pub 18 | ---- 19 | 20 | `id_dsa` veya `id_rsa` gibi adlara sahip bir çift dosya arıyorsunuz ve buna uygun `.pub` uzantılı bir dosya. 21 | `.pub` dosyası ortak anahtarı temsil eder, diğer dosya ise buna karşılık gelen özel anahtardır. 22 | Bu dosyalara sahip değilseniz (veya .ssh dizininiz bile yoksa), Linux/macOS sistemlerinde SSH paketi ile birlikte sağlanan ve Windows için Git ile birlikte gelen ssh-keygen adlı bir programı çalıştırarak bunları oluşturabilirsiniz. 23 | 24 | [source,console] 25 | ---- 26 | $ ssh-keygen -o 27 | Generating public/private rsa key pair. 28 | Enter file in which to save the key (/home/schacon/.ssh/id_rsa): 29 | Created directory '/home/schacon/.ssh'. 30 | Enter passphrase (empty for no passphrase): 31 | Enter same passphrase again: 32 | Your identification has been saved in /home/schacon/.ssh/id_rsa. 33 | Your public key has been saved in /home/schacon/.ssh/id_rsa.pub. 34 | The key fingerprint is: 35 | d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 schacon@mylaptop.local 36 | ---- 37 | 38 | İlk olarak, anahtarın nereye kaydedileceğini onaylar (`.ssh/id_rsa`), ardından iki kez bir parola sorar (eğer anahtarı kullanırken bir şifre girmek istemiyorsanız, boş bırakabilirsiniz). 39 | Ancak, bir parola kullanıyorsanız, parola kırma saldırılarına karşı daha dirençli olan bir formatta özel anahtarı kaydetmek için `-o` seçeneğini eklediğinizden emin olun (varsayılan formattan daha güvenlidir). 40 | Ayrıca, her seferinde parolayı girmekten kaçınmak için `ssh-agent` aracını da kullanabilirsiniz. 41 | 42 | Şimdi, bunu yapan her kullanıcı, ortak anahtarlarını size veya Git sunucusunu yöneten kişiye (eğer ortak anahtarları gerektiren bir SSH sunucu kurulumu kullanıyorsanız) göndermek zorundadır. 43 | Yapmaları gereken tek şey `.pub` dosyasının içeriğini kopyalayıp e-posta ile göndermektir. 44 | Ortak anahtarlar şu şekilde görünür: 45 | 46 | [source,console] 47 | ---- 48 | $ cat ~/.ssh/id_rsa.pub 49 | ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU 50 | GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3 51 | Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA 52 | t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En 53 | mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx 54 | NrRFi9wrf+M7Q== schacon@mylaptop.local 55 | ---- 56 | 57 | Farklı işletim sistemlerinde SSH anahtarı oluşturma konusunda daha detaylı bilgi için, SSH anahtarı oluşturma konusundaki GitHub rehberine göz atabilirsiniz: 58 | https://help.github.com/articles/generating-ssh-keys[]. 59 | -------------------------------------------------------------------------------- /book/04-git-server/sections/git-daemon.asc: -------------------------------------------------------------------------------- 1 | === Git Cini (Daemon) 2 | 3 | (((serving repositories, git protocol))) 4 | Şimdi, repoları "Git" protokolünü kullanarak sunan bir daemon kuracağız. 5 | Bu, Git verilerinize hızlı, kimlik doğrulamasız erişim için yaygın bir seçenektir. 6 | Unutmayın ki bu kimlik doğrulamasız bir servis olduğundan, bu protokol üzerinden sunduğunuz her şey, ağ içindeki herkese açık olacaktır. 7 | 8 | Eğer bunu güvenlik duvarınızın dışında bir sunucuda çalıştırıyorsanız, yalnızca dünya genelinde herkese açık olan projeler için kullanılmalıdır. 9 | Eğer çalıştırdığınız sunucu güvenlik duvarınızın içindeyse, birçok insanın veya bilgisayarın (sürekli entegrasyon veya derleme sunucuları gibi) salt okuma erişimine sahip olduğu projeler için kullanabilirsiniz. Böylece her biri için bir SSH anahtarı eklemek zorunda kalmazsınız. 10 | 11 | Her durumda, Git protokolü kurulumu nispeten kolaydır. 12 | Temel olarak, bu komutu daemon olarak çalıştırmanız gerekmektedir:(((git commands, daemon))) 13 | 14 | [source,console] 15 | ---- 16 | $ git daemon --reuseaddr --base-path=/srv/git/ /srv/git/ 17 | ---- 18 | 19 | `--reuseaddr` seçeneği, sunucunun eski bağlantıların zaman aşımını beklemeksizin yeniden başlamasına olanak tanırken, `--base-path` seçeneği, insanların projeleri tüm yolunu belirtmeden kopyalamasına izin verir. 20 | Dizin ise, Git daemon'a dışa aktarılacak repoları nerede bulacağını söyler. 21 | Eğer bir güvenlik duvarı kullanıyorsanız, bunu kurduğunuz kutunun 9418 numaralı portunda bir delik açmanız da gerekecektir. 22 | 23 | Bu işlemi, çalıştırdığınız işletim sistemine bağlı olarak birkaç farklı şekilde demonize edebilirsiniz. 24 | 25 | `systemd` modern Linux dağılımları arasında en yaygın init sistemi olduğu için bunu kullanabilirsiniz. 26 | Sadece `/etc/systemd/system/git-daemon.service` dizinine aşağıdaki içeriğe sahip bir dosya yerleştirin: 27 | 28 | [source,console] 29 | ---- 30 | [Unit] 31 | Description=Start Git Daemon 32 | 33 | [Service] 34 | ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/srv/git/ /srv/git/ 35 | 36 | Restart=always 37 | RestartSec=500ms 38 | 39 | StandardOutput=syslog 40 | StandardError=syslog 41 | SyslogIdentifier=git-daemon 42 | 43 | User=git 44 | Group=git 45 | 46 | [Install] 47 | WantedBy=multi-user.target 48 | ---- 49 | 50 | Git daemon'un burada hem grup hem de kullanıcı olarak `git` ile başlatıldığını farketmiş olabilirsiniz. 51 | Bunu kendi ihtiyaçlarınıza uyacak şekilde değiştirin ve sağlanan kullanıcının sistemde var olduğundan emin olun. 52 | Ayrıca, Git binary'sinin gerçekten `/usr/bin/git` dizininde olduğunu kontrol edin ve gerekirse dizini değiştirin. 53 | 54 | Son olarak, `systemctl enable git-daemon` komutunu çalıştırarak servisin otomatik olarak başlamasını sağlayabilir, `systemctl start git-daemon` komutu ile servisi başlatabilir veya `systemctl stop git-daemon` komutu ile durdurabilirsiniz. 55 | 56 | Diğer sistemlerde, `xinetd` (`sysvinit` sisteminizde bir betik) veya başka bir şey kullanmak isteyebilirsiniz. 57 | Yeter ki o komutu bir şekilde demonize edip izleyin. 58 | 59 | Sonraki adım olarak, Git'e hangi repoların kimlik doğrulamasız Git sunucu tabanlı erişimine izin vereceğini belirtmelisiniz. 60 | `git-daemon-export-ok` adında bir dosya oluşturarak, her repoda bunu yapabilirsiniz. 61 | 62 | [source,console] 63 | ---- 64 | $ cd /path/to/project.git 65 | $ touch git-daemon-export-ok 66 | ---- 67 | 68 | Bu dosyanın varlığı, Git'e bu projenin kimlik doğrulamasız hizmet vermesinin uygun olduğunu söyler. 69 | -------------------------------------------------------------------------------- /book/04-git-server/sections/git-on-a-server.asc: -------------------------------------------------------------------------------- 1 | [[_getting_git_on_a_server]] 2 | === Bir Sunucuda Git Kurma 3 | 4 | Şimdi kendi sunucunuzda bu protokoller üzerinde çalışan bir Git servisi kurmayı ele alacağız. 5 | 6 | [NOTE] 7 | ==== 8 | Burada, temel ve basitleştirilmiş kurulumları yapmak için gereken komutları ve adımları Linux tabanlı bir sunucuda göstereceğiz, ancak bu servisleri macOS veya Windows sunucularında çalıştırmak da mümkündür. 9 | Aslında altyapınız içinde canlı bir sunucu kurmak, güvenlik önlemlerinde veya işletim sistem araçlarında farklılıkları beraberinde getirecektir, ancak nasıl yapılacağı konusunda genel olarak fikir sahibi olacağınızı umuyorum. 10 | ==== 11 | 12 | Herhangi bir Git sunucusunu başlangıçta kurabilmek için mevcut bir repoyu yeni bir yalın repo (bare repository) olmak üzere (çalışma dizini içermeyen bir repo) dışa aktarmanız gerekir. 13 | Bunu yapmak oldukça basittir. 14 | Yeni bir yalın repo oluşturmak üzere reponuzu kopyalamak için kopyalama komutunu `--bare` seçeneği ile çalıştırırsınız.(((git commands, clone, bare))) 15 | Geleneksel olarak, yalın repo dizin adları, `.git` soneki ile biter. 16 | Şu şekildedir: 17 | 18 | [source,console] 19 | ---- 20 | $ git clone --bare my_project my_project.git 21 | Cloning into bare repository 'my_project.git'... 22 | done. 23 | ---- 24 | 25 | Artık `my_project.git` dizininde Git dizin verilerinin bir kopyasına sahip olmalısınız. 26 | 27 | Bu, şuna benzer bir şeye karşılık gelir: 28 | 29 | [source,console] 30 | ---- 31 | $ cp -Rf my_project/.git my_project.git 32 | ---- 33 | 34 | Yapılandırma dosyasında birkaç küçük fark vardır, ancak sizin amacınız için bu neredeyse aynı şeydir. 35 | Çalışma dizini olmadan yalnızca Git reposunu alır ve ona özel bir dizin oluşturur. 36 | 37 | [[_bare_repo]] 38 | ==== Yalın Repoyu Sunucuya Alma 39 | 40 | Artık repo için bir yalın kopyaya sahip olduğunuza göre, yapmanız gereken tek şey onu bir sunucuya yerleştirmek ve protokollerinizi kurmaktır. 41 | Diyelim ki SSH erişiminiz olan `git.example.com` adında bir sunucu kurmuşsunuz ve tüm Git repolarınızı `/srv/git` dizini altında saklamak istiyorsunuz. 42 | Bu sunucuda `/srv/git` dizinin bulunduğunu varsayarak, yeni reponuzu, yalın repoyu kopyalayarak aşağıdaki gibi kurabilirsiniz: 43 | 44 | [source,console] 45 | ---- 46 | $ scp -r my_project.git user@git.example.com:/srv/git 47 | ---- 48 | 49 | Artık, o sunucudaki `/srv/git` dizinine SSH tabanlı okuma erişimi olan diğer kullanıcılar, repoyu şu komutu çalıştırarak kopyalayabilir: 50 | 51 | [source,console] 52 | ---- 53 | $ git clone user@git.example.com:/srv/git/my_project.git 54 | ---- 55 | 56 | Eğer `/srv/git/my_project.git` dizinine yazma erişimine sahip bir kullanıcı, sunucuya SSH ile bağlanırsa, otomatik olarak itme erişimine de sahip olacaktır. 57 | 58 | `git init` komutunu `--shared` seçeneği ile çalıştırırsanız, Git otomatik olarak bir repoya grup yazma izinlerini ekler. 59 | Bu komutu çalıştırarak, bu süreçte hiçbir katkı, referans vb. yok edilmeyecektir.(((git commands, init, bare))) 60 | 61 | [source,console] 62 | ---- 63 | $ ssh user@git.example.com 64 | $ cd /srv/git/my_project.git 65 | $ git init --bare --shared 66 | ---- 67 | 68 | Bir Git reposunu almanın, yalın bir sürüm oluşturmanın ve iş arkadaşlarınızla birlikte SSH erişimine sahip olduğunuz bir sunucuya yerleştirmenin ne kadar kolay olduğunu gördünüz. 69 | Şimdi aynı projede işbirliği yapmaya hazırsınız. 70 | 71 | Birkaç kişinin erişimi olan kullanışlı bir Git sunucusunu çalıştırmak için yapmanız gereken tek şey budur. 72 | Sadece bir sunucuda SSH erişimine sahip hesaplar ekleyin ve tüm bu kullanıcılara okuma ve yazma erişimi veren yalın bir repoyu bir yere yerleştirin. 73 | Artık çalışmaya hazırsınız. 74 | 75 | Sonraki birkaç bölümde, daha karmaşık kurulumlara nasıl genişleyeceğinizi göreceksiniz. 76 | Bu mevzu, her bir kullanıcı için hesap oluşturmak zorunda kalmadan, repolara genel okuma erişimi eklemek, ağ arayüzleri kurmak ve daha fazlasını içerecek. 77 | Yine de birkaç kişiyle özel bir projede işbirliği yapmak için ihtiyacınız olan _tek şey_ bir SSH sunucusu ve bir yalın repodur. 78 | 79 | ==== Ufak Kurulumlar 80 | 81 | Eğer küçük bir ekip veya organizasyonunuzda Git'i denemek için sadece birkaç geliştiriciniz varsa, işler sizin için basit olabilir. 82 | Git sunucusu kurmanın en karmaşık yönlerinden biri kullanıcı yönetimidir. 83 | Bazı repoların belirli kullanıcılar için salt okunur, diğerleri için ise okuma/yazma izinli olmasını istiyorsanız, erişim ve izinleri düzenlemek biraz daha zor olabilir. 84 | 85 | ===== SSH Erişimi 86 | 87 | (((serving repositories, SSH))) 88 | Eğer tüm geliştiricilerinizin zaten SSH erişimine sahip olduğu bir sunucunuz varsa, en kolayı ilk repoyu orada kurmaktır, çünkü (geçen bölümde anlattığımız gibi) neredeyse hiç iş yapmanıza gerek yoktur. 89 | Eğer repolarınızda daha karmaşık erişim kontrolü türü izinler olmasını istiyorsanız, bunları sunucunuzun işletim sisteminin normal dosya sistem izinleri ile yönetebilirsiniz. 90 | 91 | Eğer repolarınızı, yazma erişimi vermek istediğiniz herkesin hesap sahip olmadığı bir sunucuya koymak istiyorsanız, o zaman onlar için SSH erişimi kurmalısınız. 92 | Bu işlemi yapacak bir sunucunuz varsa, zaten bir SSH sunucusu kurulu olduğunu ve sunucuya erişim sağlamak için bu yöntemi kullandığınızı varsayıyoruz. 93 | 94 | Takımınızdaki herkese erişim sağlamanın birkaç yolu vardır. 95 | İlk olarak, herkes için birer hesap açaabilirsiniz, bu basit ancak sıkıcı olabilecek bir iştir. 96 | Her yeni kullanıcı için `adduser` (veya olası alternatif `useradd`) komutunu çalıştırmak ve geçici şifreler belirlemek istemeyebilirsiniz. 97 | 98 | İkinci bir yöntem, makinada tek bir 'git' kullanıcı hesabı oluşturmak, yazma erişimine sahip olacak her kullanıcıdan bir SSH genel anahtarı göndermelerini istemek ve bu anahtarı yeni 'git' hesabının `~/.ssh/authorized_keys` dosyasına eklemektir. 99 | Artık, herkes 'git' hesabı üzerinden bu makineye erişebilecektir. 100 | Bu, herhangi bir şekilde katkı verilerini etkilemez (bağlandığınız SSH kullanıcısı, işlediğiniz katkıları etkilemez). 101 | 102 | Bunu yapmanın başka bir yolu da SSH sunucunuzun bir LDAP sunucusu veya zaten kurulu olan başka bir merkezi kimlik doğrulama kaynağından kimlik doğrulamasını yapmasını sağlamaktır. 103 | Her kullanıcı makineye kabuk erişimi alabildiği sürece, aklınıza gelebilecek herhangi bir SSH kimlik doğrulama mekanizması çalışmalıdır. 104 | -------------------------------------------------------------------------------- /book/04-git-server/sections/gitweb.asc: -------------------------------------------------------------------------------- 1 | === GitWeb 2 | 3 | (((serving repositories, GitWeb)))(((GitWeb))) 4 | Şimdi temel okuma/yazma ve salt okuma erişiminiz olduğuna göre, basit bir web tabanlı görselleştirici kurmak isteyebilirsiniz. 5 | Git bazen bu iş için kullanılan GitWeb adlı bir CGI betiği ile birlikte gelir. 6 | 7 | [[gitweb]] 8 | .GitWeb ağ-tabanlı kullanıcı arayüzü. 9 | image::images/git-instaweb.png[GitWeb ağ-tabanlı kullanıcı arayüzü.] 10 | 11 | Eğer sisteminizde `lighttpd` veya `webrick` gibi hafif bir ağ sunucusuna sahipseniz ve GitWeb'in projeniz için nasıl görüneceğini kontrol etmek istiyorsanız, Git bir geçici bir örnek başlatmak için bir komut içerir. 12 | Linux makinelerinde genellikle `lighttpd` yüklüdür, bu nedenle projeniz dizininde `git instaweb` yazarak bunu çalıştırabilirsiniz. 13 | Mac'te ise Ruby ile önceden yüklenmiş gelen Leopard bulunduğu için, `webrick` belki en iyi seçeneğiniz olabilir. 14 | `instaweb` 'i lighttpd olmayan bir işleyici ile başlatmak için `--httpd` seçeneği ile çalıştırabilirsiniz.(((git commands, instaweb))) 15 | 16 | [source,console] 17 | ---- 18 | $ git instaweb --httpd=webrick 19 | [2009-02-21 10:02:21] INFO WEBrick 1.3.1 20 | [2009-02-21 10:02:21] INFO ruby 1.8.6 (2008-03-03) [universal-darwin9.0] 21 | ---- 22 | 23 | Bu komut, önce 1234 portunda bir HTTPD sunucusunu ve ardından otomatik olarak bu sayfada açılan bir web tarayıcısını başlatır. 24 | Gördüğünüz gibi yapmanız gereken pek bir şey yok. 25 | İşiniz bittiğinde ve sunucuyu kapatmak istediğinizde, aynı komutu `--stop` seçeneği ile çalıştırabilirsiniz: 26 | 27 | [source,console] 28 | ---- 29 | $ git instaweb --httpd=webrick --stop 30 | ---- 31 | 32 | Eğer web arayüzünü, ekibiniz veya barındırdığınız bir açık kaynak projesi için, sürekli bir sunucuda çalıştırmak istiyorsanız, CGI betiğini normal web sunucunuz tarafından sunulacak şekilde kurmanız gerekecektir. 33 | Bazı Linux dağıtımlarında `apt` veya `dnf` üzerinden kurabileceğiniz bir `gitweb` paketi bulunabilir, bu nedenle önce bunu denemek isteyebilirsiniz. 34 | GitWeb'i nasıl hızlı bir şekilde manuel olarak kuracağınızı anlatacağız. 35 | İlk olarak, GitWeb ile birlikte gelen Git kaynak kodunu elde etmeniz ve özel CGI betiğini oluşturmanız gerekiyor: 36 | 37 | [source,console] 38 | ---- 39 | $ git clone git://git.kernel.org/pub/scm/git/git.git 40 | $ cd git/ 41 | $ make GITWEB_PROJECTROOT="/srv/git" prefix=/usr gitweb 42 | SUBDIR gitweb 43 | SUBDIR ../ 44 | make[2]: `GIT-VERSION-FILE' is up to date. 45 | GEN gitweb.cgi 46 | GEN static/gitweb.js 47 | $ sudo cp -Rf gitweb /var/www/ 48 | ---- 49 | 50 | Dikkat edin, komuta `GITWEB_PROJECTROOT` değişkeni ile Git depolarınızı nerede bulacağınızı belirtmeniz gerekmektedir. 51 | Şimdi, Apache'nin bu betik için CGI'yi kullanmasını sağlamalısınız, bunun için bir sanal sunucu (virtualHost) ekleyebilirsiniz: 52 | 53 | [source,console] 54 | ---- 55 | 56 | ServerName gitserver 57 | DocumentRoot /var/www/gitweb 58 | 59 | Options +ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch 60 | AllowOverride All 61 | order allow,deny 62 | Allow from all 63 | AddHandler cgi-script cgi 64 | DirectoryIndex gitweb.cgi 65 | 66 | 67 | ---- 68 | 69 | GitWeb herhangi bir CGI veya Perl yetenekli web sunucusu ile sunulabilir, yine de başka bir şey kullanmayı tercih ediyorsanız, kurulumu zor olmasa gerek. 70 | Bu noktada, repolarınızı çevrimiçi görüntülemek için `http://gitserver/` adresini ziyaret edebilmelisiniz. 71 | -------------------------------------------------------------------------------- /book/04-git-server/sections/hosted.asc: -------------------------------------------------------------------------------- 1 | === Üçüncü Taraf Barındırma (Hosting) Seçenekleri 2 | 3 | Kendi Git sunucunuzu kurmak için gereken tüm işlemleri yapmak istemiyorsanız, Git projelerinizi barındırabileceğiniz harici bir siteden yayın yapma seçenekleriniz de bulunmaktadır. 4 | Bunu yapmanın birçok avantajı vardır: bir barındırma sitesi genellikle hızlı kurulur, projeleri başlatmak kolaydır ve sunucu bakım veya izlemesi gerekmez. 5 | Dahili olarak kendi sunucunuzu kurup çalıştırsanız bile, açık kaynak kodunuz için genel bir barındırma sitesini kullanmak isteyebilirsiniz. 6 | Bu şekilde genellikle açık kaynak topluluğunun sizi bulması ve yardım etmesi daha kolay olur. 7 | 8 | Bu günlerde seçebileceğiniz birçok barındırma seçeneği bulunmaktadır, her birinin farklı avantajları ve dezavantajları vardır. 9 | Güncel bir liste görmek için, ana Git wiki'sindeki GitHosting sayfasına göz atabilirsiniz: 10 | https://git.wiki.kernel.org/index.php/GitHosting[] 11 | 12 | Kendi Git sunucunuzu kurmak istemiyorsanız, GitHub gibi en büyük Git barındırma hizmetlerinden birini kullanmayı düşünebilirsiniz (GitHub ile ilgili detaylı bilgilere <> bölümünde yer vereceğiz). 13 | GitHub şu anda en büyük Git barındırma hizmetidir ve herhangi bir durumda GitHub üzerinde barındırılan projelerle etkileşimde bulunmanız gerekebilir. 14 | Ancak, kendi Git sunucunuzu kurmak istemezseniz, tercih edebileceğiniz onlarca farklı seçenek daha mevcuttur. 15 | -------------------------------------------------------------------------------- /book/04-git-server/sections/setting-up-server.asc: -------------------------------------------------------------------------------- 1 | [[_setting_up_server]] 2 | === Sunucu Kurma 3 | 4 | Sunucu tarafında SSH erişimini kurma işlemine geçelim. 5 | Bu örnekte, kullanıcılarınızı kimlik doğrulamak için `authorized_keys` (yetkili anahtar) yöntemini kullanacaksınız. 6 | Ayrıca, Ubuntu gibi standart bir Linux dağıtımını kullandığınızı varsayıyoruz. 7 | 8 | [NOTE] 9 | ==== 10 | Burada açıklanan birçok işlem, ortak anahtarları manuel olarak kopyalamak ve yüklemek yerine `ssh-copy-id` komutunu kullanarak otomatikleştirilebilir. 11 | ==== 12 | 13 | İlk olarak, bir `git` kullanıcı hesabı oluşturmalısınız ve bu kullanıcı için bir `.ssh` dizini oluşturmalısınız. 14 | 15 | [source,console] 16 | ---- 17 | $ sudo adduser git 18 | $ su git 19 | $ cd 20 | $ mkdir .ssh && chmod 700 .ssh 21 | $ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys 22 | ---- 23 | 24 | Sonraki adım, güvenilir bazı geliştirici SSH ortak anahtarlarını `git` kullanıcısı için `authorized_keys` dosyasına eklemektir. 25 | Varsayalım ki güvenilir ortak anahtarlarınız var ve bunları geçici dosyalara kaydettiniz. 26 | Tekrar belirtmek gerekirse, ortak anahtarlar şu şekilde görünür: 27 | 28 | [source,console] 29 | ---- 30 | $ cat /tmp/id_rsa.john.pub 31 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L 32 | ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k 33 | Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez 34 | Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv 35 | O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq 36 | dAv8JggJICUvax2T9va5 gsg-keypair 37 | ---- 38 | 39 | Onları sadece `git` kullanıcısının `.ssh` dizinindeki `authorized_keys` dosyasına eklersiniz: 40 | 41 | [source,console] 42 | ---- 43 | $ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys 44 | $ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys 45 | $ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys 46 | ---- 47 | 48 | Şimdi, onlar için boş bir repo kurabilirsiniz. 49 | Bunun için `--bare` seçeneği ile `git init` komutunu çalıştırın, böylece bir çalışma dizini olmadan repo başlatılır:(((git commands, init, bare))) 50 | 51 | [source,console] 52 | ---- 53 | $ cd /srv/git 54 | $ mkdir project.git 55 | $ cd project.git 56 | $ git init --bare 57 | Initialized empty Git repository in /srv/git/project.git/ 58 | ---- 59 | 60 | Sonra, John, Josie veya Jessica, ona bir uzak repo olarak bağlanıp, bir dalı yukarı iterek, projelerinin ilk sürümünü bu repoya ekleyebilir. 61 | Unutmayın ki bir proje eklemek istediğinizde birisi makinaya giriş yapmalı ve bir yalın repo oluşturmalıdır. 62 | `git` kullanıcınızı ve repoyu kurduğunuz sunucunun ana bilgisayar adını `gitserver` olarak kullanalım. 63 | Eğer bunu içsel (internal) olarak çalıştırıyorsanız ve `gitserver` için DNS kurulumu yaptıysanız, o zaman komutları neredeyse olduğu gibi kullanabilirsiniz (`myproject`i dosyalar içeren mevcut bir proje olarak varsayalım): 64 | 65 | [source,console] 66 | ---- 67 | # on John's computer 68 | $ cd myproject 69 | $ git init 70 | $ git add . 71 | $ git commit -m 'initial commit' 72 | $ git remote add origin git@gitserver:/srv/git/project.git 73 | $ git push origin master 74 | ---- 75 | 76 | Artık, diğerleri bunu kolayca kopyalayabilir ve değişiklikleri itebilir: 77 | 78 | [source,console] 79 | ---- 80 | $ git clone git@gitserver:/srv/git/project.git 81 | $ cd project 82 | $ vim README 83 | $ git commit -am 'fix for the README file' 84 | $ git push origin master 85 | ---- 86 | 87 | Bu yöntemle, birkaç geliştirici için hızlıca okuma/yazma erişimli bir Git sunucusu kurabilirsiniz. 88 | 89 | Dikkat etmeniz gereken bir husus, şu anda tüm bu kullanıcıların sunucuya giriş yapıp, bir `git` kullanıcısı olarak bir kabuk (shell) alabilmesidir. 90 | Bunu sınırlamak istiyorsanız, `/etc/passwd` dosyasında kabuğu başka bir şeye değiştirmeniz gerekecektir. 91 | 92 | `git` kullanıcı hesabını sadece Git ile ilgili faaliyetlerle kısıtlamak için, Git ile birlikte gelen sınırlı bir kabuk aracı olan `git-shell`i kullanabilirsiniz. 93 | Eğer `git` kullanıcı hesabının giriş kabuğu olarak bunu ayarlarsanız, o hesap sunucunuzda normal kabuk erişimine sahip olamaz. 94 | Bunu kullanmak için, o hesabın giriş kabuğu olarak bash veya csh yerine `git-shell` 'i belirtmelisiniz. 95 | Bunun için, eğer hali hazırda yoksa, `/etc/shells` dosyasına `git-shell` komutunun tam yolunu eklemeniz gerekmektedir: 96 | 97 | [source,console] 98 | ---- 99 | $ cat /etc/shells # see if `git-shell` is already in there. If ... 100 | $ which git-shell # make sure git-shell is installed on your system. 101 | $ sudo -e /etc/shells # and add the path to git-shell from last command 102 | ---- 103 | 104 | Şimdi bir kullanıcının kabuğunu `chsh -s ` komutunu kullanarak düzenleyebilirsiniz: 105 | 106 | [source,console] 107 | ---- 108 | $ sudo chsh git -s $(which git-shell) 109 | ---- 110 | 111 | Şimdi, `git` kullanıcısı SSH bağlantısını kullanarak yalnızca Git depolarını itme ve çekme işlemlerini gerçekleştirebilir ama makineye kabuk alamaz. 112 | Yine de denerseniz, şunun gibi bir giriş reddi görürsünüz: 113 | 114 | [source,console] 115 | ---- 116 | $ ssh git@gitserver 117 | fatal: Interactive git shell is enabled. 118 | hint: ~/git-shell-commands should exist and have read and execute access. 119 | Connection to gitserver closed. 120 | ---- 121 | 122 | Şimdi Git ağ komutları hala düzgün çalışacak ancak kullanıcılar bir kabuk alamayacaktır. 123 | Çıktıda belirtildiği gibi, `git` kullanıcısının ana dizininde `git-shell` komutunu bir miktar özelleştiren bir dizin de kurabilirsiniz. 124 | Örneğin, sunucunun kabul edeceği Git komutlarını sınırlayabilir veya kullanıcıların SSH ile giriş yapmaya çalıştıklarında görecekleri iletileri özelleştirebilirsiniz. 125 | Kabuğu özelleştirmekle ilgili daha fazla bilgi için `git help shell` komutunu çalıştırın.(((git commands, help))) 126 | -------------------------------------------------------------------------------- /book/04-git-server/sections/smart-http.asc: -------------------------------------------------------------------------------- 1 | === Akıllı HTTP 2 | 3 | (((serving repositories, HTTP))) 4 | Şimdi hem SSH üzerinden kimlik doğrulamalı erişim hem de `git://` üzerinden kimlik doğrulamasız erişimimiz var, ancak aynı anda her ikisini de yapabilen bir protokol de bulunmaktadır. 5 | Akıllı HTTP'yi kurmak temel olarak sunucuda Git ile birlikte gelen `git-http-backend` adlı bir CGI betiğini etkinleştirmektir.(((git commands, "http-backend"))) 6 | Bu CGI bir `git fetch` veya `git push` 'un bir HTTP URL'sine gönderdiği dizin ve başlıkları okur ve istemcinin HTTP üzerinden iletişim kurup kuramayacağını belirler (1.6.6 sürümünden itibaren tüm istemciler için doğrudur). 7 | CGI istemcinin akıllı olduğunu görürse onunla akıllı iletişim kurar, aksi takdirde (daha eski istemcilerle geriye dönük uyumluluk için) aptal davranışa geri döner. 8 | 9 | Hadi şimdi çok temel bir kurulumu inceleyelim. 10 | Bunu Apache'yi CGI sunucusu olarak kullanarak yapacağız. 11 | Eğer Apache kurulumunuz yoksa, Linux üzerinde şöyle bir şey yapabilirsiniz:(((Apache))) 12 | 13 | [source,console] 14 | ---- 15 | $ sudo apt-get install apache2 apache2-utils 16 | $ a2enmod cgi alias env 17 | ---- 18 | 19 | Bu aynı zamanda bunun düzgün çalışabilmesi için gereken `mod_cgi`, `mod_alias` ve `mod_env` modüllerini de etkinleştirir. 20 | 21 | Ayrıca, `/srv/git` dizinlerinin Unix kullanıcı grubunu `www-data` olarak ayarlamanız gerekecektir. 22 | Böylece web sunucunuz repoları okuma ve yazma erişimine sahip olabilir, çünkü CGI betiğini çalıştıran Apache örneği (varsayılan olarak) bu kullanıcı olarak çalışacaktır: 23 | 24 | [source,console] 25 | ---- 26 | $ chgrp -R www-data /srv/git 27 | ---- 28 | 29 | Şimdi, Apache yapılandırmasına bazı şeyler ekleyelim ki `git-http-backend` 'i web sunucunuzun `/git` dizinine gelen her şey için işleyici olarak çalıştırsın. 30 | 31 | [source,console] 32 | ---- 33 | SetEnv GIT_PROJECT_ROOT /srv/git 34 | SetEnv GIT_HTTP_EXPORT_ALL 35 | ScriptAlias /git/ /usr/lib/git-core/git-http-backend/ 36 | ---- 37 | 38 | Eğer `GIT_HTTP_EXPORT_ALL` ortam değişkenini çıkartırsanız, Git (tam olarak Git daemon'ın yaptığı gibi) yalnızca `git-daemon-export-ok` dosyasına sahip olan repoları kimlik doğrulamasız istemcilere sunacaktır. 39 | 40 | Son olarak, Apache'ye `git-http-backend` 'e olan isteklere izin vermesini ve yazma işlemlerinin bir şekilde kimlik doğrulanmasını yapmasını isteyeceksiniz, muhtemelen şu şekilde bir Auth bloğu ile: 41 | 42 | [source,console] 43 | ---- 44 | 45 | AuthType Basic 46 | AuthName "Git Access" 47 | AuthUserFile /srv/git/.htpasswd 48 | Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#) 49 | Require valid-user 50 | 51 | ---- 52 | 53 | Bu geçerli tüm kullanıcıların şifrelerini içeren bir `.htpasswd` dosyası oluşturmanızı gerektirecektir. 54 | İşte dosyaya bir ``schacon`` kullanıcısı eklemenin bir örneği: 55 | 56 | [source,console] 57 | ---- 58 | $ htpasswd -c /srv/git/.htpasswd schacon 59 | ---- 60 | 61 | Apache'in kullanıcıların kimliğini doğrulaması için birçok yöntemi bulunmaktadır, bunlardan birini seçip uygulamanız gerekecektir. 62 | Bulabildiğimiz en basit örnek budur. 63 | Ayrıca muhtemelen tüm bu verilerin şifrelenmesi için bunu SSL üzerinden kurmak isteyeceksiniz. 64 | 65 | Apache yapılandırma detaylarına fazla girmek istemiyoruz, çünkü muhtemelen farklı bir sunucu kullanıyor olabilirsiniz veya farklı kimlik doğrulama ihtiyacınız olabilir. 66 | Fikir, Git'in çağrıldığında HTTP üzerinden veri gönderme ve alma işlemlerini yürütecek `git-http-backend` adlı bir CGI ile birlikte gelmesidir. 67 | Kendi başına kimlik sormaz, ancak kendini çağıran web sunucu katmanında kolayca kontrol edilebilir. 68 | Bu neredeyse CGI yetenekli her web sunucusuyla yapılabilir, bu nedenle en iyi bildiğiniz sunucu ile devam edin. 69 | 70 | [NOTE] 71 | ==== 72 | Apache'de kimlik doğrulama yapılandırması hakkında daha fazla bilgi için Apache kılavuzunu buradan kontrol edebilirsiniz: 73 | https://httpd.apache.org/docs/current/howto/auth.html[] 74 | ==== 75 | -------------------------------------------------------------------------------- /book/06-github/sections/1-setting-up-account.asc: -------------------------------------------------------------------------------- 1 | === Hesap Kurulumu ve Yapılandırma 2 | 3 | (((GitHub, user accounts))) 4 | İlk yapmanız gereken şey ücretsiz bir kullanıcı hesabı oluşturmaktır. 5 | https://github.com[] adresine gidin, henüz alınmamış bir kullanıcı adı seçin, e-posta adresinizi girin ve bir şifre belirleyin, ardından büyük yeşil "Sign up for GitHub" düğmesine tıklayın. 6 | 7 | .GitHub kayıt formu. 8 | image::images/signup.png[GitHub kayıt formu.] 9 | 10 | Göreceğiniz bir sonraki şey, yükseltilmiş planların fiyatlandırma sayfasıdır, ancak şimdilik bunu yok sayabilirsiniz. 11 | GitHub, e-posta adresinizi doğrulamak için size bir e-posta gönderecektir. 12 | E-posta ile gönderilen linki tıklayın ve işleme devam edin. 13 | Daha sonra göreceğiniz üzere bu çok önemlidir. 14 | 15 | [NOTE] 16 | ==== 17 | Ücretsiz hesaplar Github'ın tüm işlevlerinden faydalanabilir, ancak tüm projeleriniz herkesin okuma erişimine açıktır. 18 | Ücretli planların ayrıca özel projeler oluşturma seçeneğini de vardır, ancak bu kitapta o konuyu ele almayacağız. 19 | ==== 20 | 21 | Ekranın sol üst köşesindeki Octocat (sekiz kollu kedi) logosuna tıklamak sizi gösterge panelinize götürecektir. 22 | Artık GitHub'ı kullanmaya hazırsınız. 23 | 24 | ==== SSH Erişimi 25 | 26 | (((SSH keys, with GitHub))) 27 | Şu anda, `https://` protokolünü kullanarak doğrudan Git repolarına bağlanabilir; yeni oluşturduğunuz kullanıcı adı ve şifrenizle kimlik doğrulaması yapabilirsiniz. 28 | Kaydolmaya bile gerek duymadan açık projeleri kopyalayabilirsiniz. 29 | Projeleri çatallamak ve çatallarımıza katkılarımızı itmek için oluşturduğumuz hesap anında devreye girer. 30 | 31 | Uzak SSH sunucularını kullanmak istiyorsanız, bir açık anahtar yapılandırmanız gerekecektir. 32 | (Eğer anahtarınız yoksa, <> bölümüne bakın.) 33 | Pencerenin sağ üst köşesindeki bağlantıyı kullanarak hesap ayarlarınızı açın: 34 | 35 | ."Account Settings" (Hesap Ayarları) bağlantısı. 36 | image::images/account-settings.png["Account Settings" (Hesap Ayarları) bağlantısı.] 37 | 38 | Ardından sol taraftaki "SSH keys" (SSH anahtarı) bölümünü seçin. 39 | 40 | ."SSH keys" (SSH anahtarı) bağlantısı. 41 | image::images/ssh-keys.png["SSH keys" (SSH anahtarı) bağlantısı.] 42 | 43 | Buradan, `Add an SSH key` (Bir SSH anahtarı ekle) düğmesine tıklayın, anahtarınıza bir isim verin, `~/.ssh/id_rsa.pub` (veya adını ne koyduysanız) dosyanızın içeriğini metin alanına yapıştırın ve `Add key` (Anahtarı ekle) düğmesine tıklayın. 44 | 45 | [NOTE] 46 | ==== 47 | SSH anahtarınıza unutmayacağınız bir isim verdiğinizden emin olun. 48 | Her bir anahtarınızı ayrıcı adlandırabilirsiniz (örneğin "Bilgisayarım" veya "İş Hesabı"); böylece daha sonra bir anahtarı iptal etmeniz gerektiğinde, hangisini aradığınızı kolayca belirleyebilirsiniz. 49 | ==== 50 | 51 | [[_personal_avatar]] 52 | ==== Avatarınız 53 | 54 | Sonraki adımda, isterseniz size varsayılan olarak atanan avatarı, kendi seçtiğiniz bir resimle değiştirebilirsiniz. 55 | İlk olarak, "Profile" (profil) sekmesine gidin (SSH Anahtarları sekmesinin üstünde) ve `Upload new picture` "Yeni resim yükle"yi tıklayın. 56 | 57 | ."Profile" (profil) bağlantısı. 58 | image::images/your-profile.png["Profile" (profil) bağlantısı.] 59 | 60 | Bilgisayarınızdan Git logosunun bir kopyasını seçip, ardından onu kırpma şansı elde edeceksiniz. 61 | 62 | .Avatarınızı kırpın 63 | image::images/avatar-crop.png[Yüklediğiniz Avatarı kırpın.] 64 | 65 | Şimdi sayfa üzerinde etkileşimde bulunduğunuz her yerde, insanlar kullanıcı adınızın yanında avatarınızı görecekler. 66 | 67 | Eğer popüler Gravatar servisine (çoğunlukla Wordpress hesapları için kullanılır) bir avatar yüklediyseniz, varsayılan olarak o avatar kullanılacaktır; haliyle bu adımı yapmanıza gerek yoktur. 68 | 69 | ==== E-Posta Adresleri 70 | 71 | GitHub'ın Git katkılarını kullanıcıya eşlemesinin yolu e-posta adresiyle olur. 72 | Birden fazla e-posta adresi kullanıyorsanız ve GitHub'ın bunları doğru şekilde bağlamasını istiyorsanız, kullandığınız tüm e-posta adreslerini "admin" (yönetim) bölümünün E-postalar bölümüne eklemeniz gerekir. 73 | 74 | [[_add_email_addresses]] 75 | .E-posta adresi ekleme 76 | image::images/email-settings.png[Tüm e-posta adreslerinizi ekleyin.] 77 | 78 | <<_add_email_addresses>> bağlantısında olası farklı durumları görebiliriz. 79 | En üstteki adres doğrulanmış ve birincil adres olarak ayarlanmıştır, bu nedenle tüm bildirim ve alıntılar buraya gönderilecektir. 80 | İkinci adres doğrulanmıştır ve dolayısıyla değiştirmek istediğinizde bunu birincil olarak ayarlayabilirsiniz. 81 | Son adres doğrulanmamıştır, bu da onu birincil adresiniz olarak belirleyemeyeceğiniz anlamına gelir. 82 | GitHub bu adreslerden herhangi birini sayfasındaki herhangi bir repodaki katkı mesajında görürse, bu katkıyla kullanıcıyı ilişkilendirecektir. 83 | 84 | ==== Çift Faktörlü Kimlik Doğrulama 85 | 86 | Son olarak, ekstra güvenlik için kesinlikle Çift Faktörlü Kimlik Doğrulama veya "2FA" kurmanız tavsiye edilir. 87 | İki Faktörlü Kimlik Doğrulama, şifrenizin bir şekilde çalınması durumunda hesabınızın tehlikeye girme riskini azaltmak için geliştirilmiş ve son zamanlarda giderek daha popüler hale gelen bir kimlik doğrulama mekanizmasıdır. 88 | Bunun etkinleştirilmesi, GitHub'ın sizden iki farklı doğrulama yöntemi istemesine neden olur; böylece biri tehlikeye girerse, saldırganın hesabınıza erişim sağlaması engellenir. 89 | 90 | İki Faktörlü Kimlik Doğrulama kurulumunu Hesap ayarlarınızın (Account Settings), Güvenlik (Security) sekmesinde bulabilirsiniz. 91 | 92 | .Güvenlik (Security) Sekmesinde 2FA 93 | image::images/2fa-1.png[Güvenlik (Security) Sekmesinde 2FA] 94 | 95 | "Set up two-factor authentication" (çift faktörlü kimlik doğrulaması kurulumu) düğmesine tıklarsanız; sizi, ikincil kodunuzu (tek kullanımlı anlık şifre) oluşturmak için bir telefon uygulaması kullanmayı seçebileceğiniz veya GitHub'ın her girişinizde size SMS yoluyla bir giriş kodu göndermesini tercih edebileceğiniz bir yapılandırma sayfasına yönlendirecektir. 96 | 97 | Tercih ettiğiniz yöntemi belirledikten ve 2FA kurulum talimatlarını izledikten sonra, hesabınız nispeten daha güvenli olacak ve GitHub'a her giriş yapmak istediğinizde, şifrenizin yanı sıra bir kod sağlamanız gerekecektir. 98 | -------------------------------------------------------------------------------- /book/06-github/sections/4-managing-organization.asc: -------------------------------------------------------------------------------- 1 | [[ch06-github_orgs]] 2 | === Kurumsal Yönetim 3 | 4 | (((GitHub, organizations))) 5 | Tek kullanıcı hesaplarına ek olarak, GitHub'ın "kuruluşlar" ad altında kurumsal hesapları da bulunmaktadır. 6 | Kişisel hesaplar gibi, Kurumsal hesaplar da tüm projelerinin bulunduğu bir isim alanına sahiptir, ancak birçok farklı özelliğe de sahiptirler. 7 | Bu hesaplar, projelerin ortak sahipliğini paylaşan bir grup insanı temsil eder ve bu insanların alt gruplarını yönetmek için birçok araç sunmaktadır. 8 | Normalde, bu hesaplar Açık Kaynak grupları (örneğin ``perl`` veya ``rails``) veya şirketler (örneğin ``google`` veya ``twitter``) için kullanılır. 9 | 10 | ==== Kısaca Kurumsal Hesap 11 | 12 | Kurumsal hesap oluşturmak oldukça kolaydır; herhangi bir GitHub sayfasının sağ üst köşesindeki ``+`` simgesine tıklayın ve menüden ``New organization`` (Yeni kuruluş) seçeneğini belirtin. 13 | 14 | ."Yeni kuruluş" ögesi. 15 | image::images/neworg.png[``New organization`` ögesi.] 16 | 17 | İlk olarak, kuruluşunuzu adlandırmanız ve grup için bir ana iletişim noktası olarak bir e-posta adresi girmeniz gerekecektir. 18 | Daha sonra, isterseniz, diğer kullanıcıları hesabın ortakları olarak davet edebilirsiniz. 19 | 20 | Bu adımları izlerseniz, çok yakında yepyeni bir kuruluşun sahibi olacaksınız. 21 | Orada saklayacağınız her şeyin açık kaynak olması durumunda, kişisel hesaplar gibi kurumsal hesaplar da ücretsizdir. 22 | 23 | Bir kuruluşun sahibi olarak bir repoyu çatalladığınızda, onu kuruluşunuzun ad alanına çatallamak üzere seçim yapabilirsiniz. 24 | Yeni repolar oluşturduğunuzda, bunları kişisel hesabınızın altında veya sahip olduğunuz herhangi bir kuruluşun altında oluşturabilirsiniz. 25 | Ayrıca, bu kuruluşlar altında oluşturulan her yeni repoyu, otomatik olarak "izlersiniz". 26 | 27 | <<_personal_avatar>> "kişisel avatar"da olduğu gibi, kuruluşunuz için bir avatar yükleyerek, onu biraz kişiselleştirebilirsiniz. 28 | Ayrıca kişisel hesaplar gibi, tüm repolarınızı listeleyen ve diğer insanlar tarafından görülebilen kurumsal bir açılış sayfasına sahipsiniz. 29 | 30 | Şimdi de kurumsal hesaplarda biraz daha farklı olan bazı konuları ele alalım. 31 | 32 | ==== Takımlar 33 | 34 | Kuruluşlar, bireysel kişilerle; bir nevi kuruluş içerisindeki bireysel kullanıcı hesapları ve bunların kurumsal repolara erişim türü grupları olan "takımlar" aracılığıyla ilişkilendirilir. 35 | 36 | Örnekle açıklamak gerekirse: diyelim ki şirketinizin üç reposu var: `frontend`, `backend` ve `deployscripts`. 37 | HTML/CSS/JavaScript geliştiricilerinizin `frontend` ve belki de `backend` repolarına, Operasyon ekibinizin ise `backend` ve `deployscripts` repolarına erişimi olmasını istersiniz. 38 | Takımlar özelliği, her bir repo için ayrı ayrı katılımcıları yönetmek zorunda kalmadan, bu işi kolaylaştırır. 39 | 40 | Kuruluş sayfası, bu kuruluşun altındaki tüm repoları, kullanıcıları ve takımları içeren basit bir gösterge paneline sahiptir. 41 | 42 | [[_org_page]] 43 | .Kuruluş sayfası. 44 | image::images/orgs-01-page.png[] 45 | 46 | Takımlarınızı yönetmek için, <<_org_page>> (kuruluş) sayfasının sağ tarafında bulunan "Teams" (Takımlar) kenar çubuğuna tıklayabilirsiniz. 47 | Bu sizi takımlara üye veya repo ekleyebileceğiniz, veya takımın ayarlarını ve erişim kontrol seviyelerini yönetebileceğiniz bir sayfaya götürecektir. 48 | Her takım, bu repolara salt okunur, okuma/yazma veya yönetici erişimli olarak ulaşabilir. 49 | Bu erişim seviyelerini <<_team_page>> (takım) sayfasındaki ``Settings`` (Ayarlar) düğmesine tıklayarak değiştirebilirsiniz. 50 | 51 | [[_team_page]] 52 | .Takım sayfası. 53 | image::images/orgs-02-teams.png[] 54 | 55 | Birini bir takıma davet ettiğinizde, davet edildiklerini bildiren bir e-posta alacaklardır. 56 | 57 | Ek olarak, takım `@mentions`(etiketlemeleri) (ör. `@acmecorp/frontend`), bireysel kullanıcılarla aynı şekilde çalışır; ancak takımın *tüm* üyeleri o konuya abone olur. 58 | Bu özellik, bir takımdan birinin dikkatini çekmek istiyor ancak tam olarak kime soracağınızı bilmiyorsanız, çok kullanışlıdır. 59 | 60 | Bir kullanıcı birden fazla takıma üye olabilir, yani kendinizi sadece "access-control" (erişim kontrolü) takımlarıyla sınırlamayın. 61 | `ux`, `css` veya `refactoring` (yeniden düzenleme) gibi özel ilgi takımları, belirli türdeki sorular için çok faydalıdır. Aslında bu `hukuk`, `renk körlüğü` vs gibi tamamen farklı türde olanlar için de öyledir. 62 | 63 | ==== Denetim Kaydı 64 | 65 | Kurumsal hesaplar sahiplerine ayrıca kuruluş altında neler olduğuyla ilgili tüm bilgilere erişim de sağlar. 66 | 'Audit Log' (denetim kaydı) sekmesine giderek, kurumsal seviyede neler olduğunu, bunları kimin yaptığını ve dünyanın neresinde yapıldığını görebilirsiniz. 67 | 68 | 69 | 70 | [[_the_audit_log]] 71 | .Denetim kaydı. 72 | image::images/orgs-03-audit.png[] 73 | 74 | Ayrıca belirli türdeki etkinliklere, belirli yerlere veya belirli kişilere göre filtreleme yapabilirsiniz. 75 | -------------------------------------------------------------------------------- /book/07-git-tools/git-credential-read-only: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require 'optparse' 4 | 5 | path = File.expand_path '~/.git-credentials' # <1> 6 | OptionParser.new do |opts| 7 | opts.banner = 'USAGE: git-credential-read-only [options] ' 8 | opts.on('-f', '--file PATH', 'Specify path for backing store') do |argpath| 9 | path = File.expand_path argpath 10 | end 11 | end.parse! 12 | 13 | exit(0) unless ARGV[0].downcase == 'get' # <2> 14 | exit(0) unless File.exists? path 15 | 16 | known = {} # <3> 17 | while line = STDIN.gets 18 | break if line.strip == '' 19 | k,v = line.strip.split '=', 2 20 | known[k] = v 21 | end 22 | 23 | File.readlines(path).each do |fileline| # <4> 24 | prot,user,pass,host = fileline.scan(/^(.*?):\/\/(.*?):(.*?)@(.*)$/).first 25 | if prot == known['protocol'] and host == known['host'] and user == known['username'] then 26 | puts "protocol=#{prot}" 27 | puts "host=#{host}" 28 | puts "username=#{user}" 29 | puts "password=#{pass}" 30 | exit(0) 31 | end 32 | end 33 | -------------------------------------------------------------------------------- /book/07-git-tools/sections/subtree-merges.asc: -------------------------------------------------------------------------------- 1 | [[_subtree_merge]] 2 | ===== Alt Ağaç Birleştirme 3 | 4 | Alt ağaç birleştirme fikri, iki projeniz olduğunda, bu projelerden birinin diğerinin alt dizinine eşlendiği anlamına gelir. 5 | Bir alt ağaç birleştirmesi belirttiğinizde, Git genellikle birinin diğerinin bir alt ağacı olduğunu ve uygun şekilde birleştirmesi gerektiğini anlayacak kadar akıllıdır. 6 | 7 | Bu bölümde, mevcut bir projeye ayrı bir proje eklemeyi ve ardından ikincisinin kodunu birincisinin bir alt dizinine birleştirmeyi inceleyeceğiz. 8 | 9 | İlk olarak, Rack uygulamasını projemize ekleyeceğiz. 10 | Rack projesini kendi projemize bir uzak referans olarak ekleyeceğiz ve sonra onun kendi dalına geçeceğiz: 11 | 12 | [source,console] 13 | ---- 14 | $ git remote add rack_remote https://github.com/rack/rack 15 | $ git fetch rack_remote --no-tags 16 | warning: no common commits 17 | remote: Counting objects: 3184, done. 18 | remote: Compressing objects: 100% (1465/1465), done. 19 | remote: Total 3184 (delta 1952), reused 2770 (delta 1675) 20 | Receiving objects: 100% (3184/3184), 677.42 KiB | 4 KiB/s, done. 21 | Resolving deltas: 100% (1952/1952), done. 22 | From https://github.com/rack/rack 23 | * [new branch] build -> rack_remote/build 24 | * [new branch] master -> rack_remote/master 25 | * [new branch] rack-0.4 -> rack_remote/rack-0.4 26 | * [new branch] rack-0.9 -> rack_remote/rack-0.9 27 | $ git checkout -b rack_branch rack_remote/master 28 | Branch rack_branch set up to track remote branch refs/remotes/rack_remote/master. 29 | Switched to a new branch "rack_branch" 30 | ---- 31 | 32 | Şimdi `master` dalında kendi projemize ve `rack_branch` dalında Rack projesinin köküne sahibiz. 33 | Önce birini, sonra diğerini kontrol ederseniz, farklı proje köklerine sahip olduklarını görebilirsiniz: 34 | 35 | [source,console] 36 | ---- 37 | $ ls 38 | AUTHORS KNOWN-ISSUES Rakefile contrib lib 39 | COPYING README bin example test 40 | $ git checkout master 41 | Switched to branch "master" 42 | $ ls 43 | README 44 | ---- 45 | 46 | Bu konsept biraz garip gelebilir. 47 | Bir repodaki tüm dalların aslında aynı projenin dalları olması gerekmez. 48 | Nadiren faydalı olduğu için bu pek yaygın değildir, ancak dalların tamamen farklı tarihçeler içermesini sağlamak aslında kolaydır. 49 | 50 | Burada, Rack projesini `master` projemize bir alt dizin olarak eklemek istiyoruz. 51 | Bunu `git read-tree` komutuyla yapabiliriz. 52 | `read-tree` ve arkadaşları hakkında daha fazla bilgiyi <> bölümünde öğreneceksiniz; ancak şimdilik, bir dalın kök ağacını mevcut izlem alanınıza ve çalışma dizinize okuduğunu bilmeniz yeterlidir. 53 | Şimdi `master` dalınıza geri döndük ve ana projemizin `master` dalına `rack_branch` dalını `rack` alt dizinine çekiyoruz: 54 | 55 | [source,console] 56 | ---- 57 | $ git read-tree --prefix=rack/ -u rack_branch 58 | ---- 59 | 60 | Katkıyı işledikten sonra, tüm Rack dosyalarının o alt dizin altında olduğu görünür (sanki onları bir sıkıştırılmış dosyadan kopyalamışız gibi). 61 | İlginç olan, bir dalın değişikliklerini bir diğerine oldukça kolay bir şekilde birleştirebilme yeteneğidir. 62 | Yani, Rack projesi güncellendiğinde, o dala geçip değişiklikleri alabiliriz: 63 | 64 | [source,console] 65 | ---- 66 | $ git checkout rack_branch 67 | $ git pull 68 | ---- 69 | 70 | Ardından, bu değişiklikleri kendi `master` dalımıza birleştirebiliriz. 71 | Değişiklikleri almak ve katkı mesajını önceden yenilemek için `--squash` seçeneğini, ayrıca özyinelemeli birleştirme stratejisinin `-Xsubtree` seçeneğini kullanın. (Özyinelemeli strateji burada varsayılan olduğundan, netleştirmek için dahil ediyoruz.) 72 | 73 | [source,console] 74 | ---- 75 | $ git checkout master 76 | $ git merge --squash -s recursive -Xsubtree=rack rack_branch 77 | Squash commit -- not updating HEAD 78 | Automatic merge went well; stopped before committing as requested 79 | ---- 80 | 81 | Rack projesindeki tüm değişiklikler birleştirilmiş ve yerel olarak katkılanmaya hazır durumdadır. 82 | Ayrıca, tam tersini de yapabilirsiniz - kendi `master` dalınızın `rack` alt dizininde değişiklikler yapın ve daha sonra bunları proje bakıcılarına veya üst akıma göndermek için sonradan `rack_branch` dalınıza birleştirin. 83 | 84 | Bu bize, alt modüller kullanmadan alt modül iş akışı kullanmaya oldukça benzeyen bir yöntem sunar (ki alt modülleri <> bölümünde ele alacağız). 85 | İlgili diğer projelerin dallarını repomuzda tutabilir ve zaman zaman alt ağaç birleştirmesi yaparak bunları kendi projemize dahil edebiliriz. 86 | Bu, mesela tüm kodların tek bir yerde katkılanmış olması gibi bazı açılardan güzel olabilir. 87 | Ancak, diğer bazı dezavantajlara sahiptir! Örneğin, biraz daha karmaşıktır, değişiklikleri yeniden entegre etmek zordur veya yanlışlıkla bir dalı ilgisiz bir repoya itmek daha kolaydır. 88 | 89 | Biraz garip olan başka bir şey de, (mesela onları birleştirmeniz gerekip gerekmediğini görmek için) `rack` alt dizininde neye sahip olduğunuz ile `rack_branch` dalındaki kod arasındaki farkı görmek istediğinizde normal `diff` komutunu kullanamıyor olmanızdır. 90 | Bunun yerine, karşılaştırmak istediğiniz dal ile `git diff-tree` komutunu çalıştırmalısınız: 91 | 92 | [source,console] 93 | ---- 94 | $ git diff-tree -p rack_branch 95 | ---- 96 | 97 | Or, to compare what is in your `rack` subdirectory with what the `master` branch on the server was the last time you fetched, you can run 98 | 99 | [source,console] 100 | ---- 101 | $ git diff-tree -p rack_remote/master 102 | ---- 103 | -------------------------------------------------------------------------------- /book/09-git-and-other-scms/sections/import-bzr.asc: -------------------------------------------------------------------------------- 1 | ==== Bazaar 2 | (((Bazaar)))(((Importing, from Bazaar))) 3 | 4 | Bazaar, Git gibi bir Dağıtık Sürüm Kontrol Sistemi (DVCS) aracıdır ve sonuç olarak bir Bazaar reposunu bir Git reposuna dönüştürmek oldukça basittir. 5 | Bunun için `bzr-fastimport` eklentisini içe aktarmanız gerekecek. 6 | 7 | ===== bzr-fastimport Eklentisini Edinme 8 | 9 | UNIX benzeri işletim sistemlerinde hızlı içe aktarma eklentisini kurmanın yolu ve Windows'tan farklıdır. 10 | UNIX'te en kolayı gerekli tüm bağımlılıkları kuracak olan `bzr-fastimport` paketini kurmaktır. 11 | 12 | Örneğin, Debian ve türevlerinde şunları yapabilirsiniz: 13 | 14 | [source,console] 15 | ---- 16 | $ sudo apt-get install bzr-fastimport 17 | ---- 18 | 19 | RHEL ile şunları yapabilirsiniz: 20 | 21 | [source,console] 22 | ---- 23 | $ sudo yum install bzr-fastimport 24 | ---- 25 | 26 | Fedora ile sürüm 22'den beri paket yöneticisi dnf'tir: 27 | 28 | [source,console] 29 | ---- 30 | $ sudo dnf install bzr-fastimport 31 | ---- 32 | 33 | Paket mevcut değilse, onu eklenti olarak yükleyebilirsiniz: 34 | 35 | [source,console] 36 | ---- 37 | $ mkdir --parents ~/.bazaar/plugins # creates the necessary folders for the plugins 38 | $ cd ~/.bazaar/plugins 39 | $ bzr branch lp:bzr-fastimport fastimport # imports the fastimport plugin 40 | $ cd fastimport 41 | $ sudo python setup.py install --record=files.txt # installs the plugin 42 | ---- 43 | 44 | Bu eklentinin çalışması için ayrıca `fastimport` Python modülüne de ihtiyacınız olacaktır. 45 | Onun mevcut olup olmadığını kontrol edebilir ve aşağıdaki komutlarla yükleyebilirsiniz: 46 | 47 | [source,console] 48 | ---- 49 | $ python -c "import fastimport" 50 | Traceback (most recent call last): 51 | File "", line 1, in 52 | ImportError: No module named fastimport 53 | $ pip install fastimport 54 | ---- 55 | Eğer mevcut değilse, onu https://pypi.python.org/pypi/fastimport/ adresinden indirebilirsiniz. 56 | 57 | Windows'ta `bzr-fastimport` standalone (bağımsız) sürümüyle ve varsayılan kurulumla (tüm onay kutularını işaretleyerek) otomatik olarak kuruludır. 58 | Bu durumda yapmanız gereken bir şey yoktur. 59 | 60 | Bu noktada, bir Bazaar reposunu içe aktarma yöntemi, tek bir dalınızın olup olmadığına veya birçok dala sahip bir repoyla çalışıp çalışmadığınıza göre farklılık gösterir. 61 | 62 | ===== Tek Dallı Proje 63 | 64 | Şimdi, Bazaar reposunu içeren dizine gidin ve Git reposunu başlatın: 65 | 66 | [source,console] 67 | ---- 68 | $ cd /path/to/the/bzr/repository 69 | $ git init 70 | ---- 71 | 72 | Şimdi, Bazaar reposunu dışa aktarabilir ve aşağıdaki komutu kullanarak bir Git reposuna dönüştürebilirsiniz: 73 | 74 | [source,console] 75 | ---- 76 | $ bzr fast-export --plain . | git fast-import 77 | ---- 78 | 79 | Proje boyutuna bağlı olarak, Git reposunun oluşturulması birkaç saniye ile birkaç dakika arasında sürebilir. 80 | 81 | ===== Bir Anadal ve Bir Çalışma Dalı Olan Proje Durumu 82 | 83 | Dallara sahip bir Bazaar reposunu da içe aktarabilirsiniz. 84 | Diyelim ki iki dalınız var: biri ana dalı temsil eder (myProject.trunk), diğeri ise çalışma dalıdır (myProject.work). 85 | 86 | [source,console] 87 | ---- 88 | $ ls 89 | myProject.trunk myProject.work 90 | ---- 91 | 92 | Git reposunu oluşturun ve dizinine gidin: 93 | 94 | [source,console] 95 | ---- 96 | $ git init git-repo 97 | $ cd git-repo 98 | ---- 99 | 100 | Master dalını Git'e çekin: 101 | 102 | [source,console] 103 | ---- 104 | $ bzr fast-export --export-marks=../marks.bzr ../myProject.trunk | \ 105 | git fast-import --export-marks=../marks.git 106 | ---- 107 | 108 | Çalışma dalını Git'e çekin: 109 | 110 | [source,console] 111 | ---- 112 | $ bzr fast-export --marks=../marks.bzr --git-branch=work ../myProject.work | \ 113 | git fast-import --import-marks=../marks.git --export-marks=../marks.git 114 | ---- 115 | 116 | Şimdi `git branch` komutu hem `master` dalını, hem de `work` dalını gösterir. 117 | Tamam olduğundan emin olmak için; log kayıtlarını kontrol edip, `marks.bzr` ve `marks.git` dosyalarını temizleyin. 118 | 119 | ===== İzleme Alanını (Stage) Senkronize Etme 120 | 121 | Ne kadar çok dalınız olursa olsun ve hangi içe aktarma yöntemini kullanırsanız kullanın, izleme alanınız `HEAD` ile senkronize değildir; ve birden fazla dalın içe aktarılmasıyla, çalışma diziniz de senkronize değildir. 122 | 123 | Bu durumu aşağıdaki komutla kolayca çözebilirsiniz: 124 | 125 | [source,console] 126 | ---- 127 | $ git reset --hard HEAD 128 | ---- 129 | 130 | ===== .bzrignore ile Yoksayılmış Dosyaları Yoksaymak 131 | 132 | Şimdi yoksayılacak dosyalara bir göz atalım. 133 | İlk yapmanız gereken `.bzrignore` dosyasını `.gitignore` olarak yeniden adlandırmaktır. 134 | `.bzrignore` dosyası "!!" veya "RE:" ile başlayan bir veya birkaç satır içeriyorsa, bunu değiştirmeniz ve belki de Bazaar'ın yoksaydığı tam olarak aynı dosyaları yoksaymak için birkaç `.gitignore` dosyası oluşturmanız gerekebilir. 135 | 136 | Son olarak, bu değişikliği içeren taşınma (migration) için bir katkı oluşturmanız gerekecektir: 137 | 138 | [source,console] 139 | ---- 140 | $ git mv .bzrignore .gitignore 141 | $ # modify .gitignore if needed 142 | $ git commit -am 'Migration from Bazaar to Git' 143 | ---- 144 | 145 | ===== Reponuzu Sunucuya Göndermek 146 | 147 | İşte oldu! 148 | Artık reponuzu yeni ana sunucusuna aktarabilirsiniz: 149 | 150 | [source,console] 151 | ---- 152 | $ git remote add origin git@my-git-server:mygitrepository.git 153 | $ git push origin --all 154 | $ git push origin --tags 155 | ---- 156 | 157 | Git reponuz kullanıma hazırdır. 158 | -------------------------------------------------------------------------------- /book/09-git-and-other-scms/sections/import-hg.asc: -------------------------------------------------------------------------------- 1 | ==== Mercurial 2 | 3 | (((Mercurial)))(((Importing, from Mercurial))) 4 | Mercurial ve Git'in sürümleri temsil etme modelleri çok benzer olduğundan ve Git biraz daha esnek olduğundan; bir repoyu Mercurial'den Git'e dönüştürmek oldukça basittir. 5 | Bu dönüşüm için `hg-fast-export` adlı bir araca ihtiyacınız olacak. 6 | 7 | [source,console] 8 | ---- 9 | $ git clone https://github.com/frej/fast-export.git 10 | ---- 11 | 12 | Dönüşümün ilk adımı, dönüştürmek istediğiniz Mercurial reposunun tam kopyasını almaktır: 13 | 14 | [source,console] 15 | ---- 16 | $ hg clone /tmp/hg-repo 17 | ---- 18 | 19 | Bir sonraki adım, bir yazar eşleştirme dosyası oluşturmaktır. 20 | Değişiklik setlerindeki yazar alanına koyabileceği şeyler konusunda Mercurial, Git'ten biraz daha esnek olduğu için; temizlemek için bu iyi bir zamandır. 21 | Bunu yapmak için bir `bash` shell'inde tek satırlık bir komut kullanabilirsiniz: 22 | 23 | [source,console] 24 | ---- 25 | $ cd /tmp/hg-repo 26 | $ hg log | grep user: | sort | uniq | sed 's/user: *//' > ../authors 27 | ---- 28 | 29 | Bu projenizin geçmişinin ne kadar uzun olduğuna bağlı olarak birkaç saniye sürecektir ve sonrasında `/tmp/authors` dosyası şöyle görünecektir: 30 | 31 | [source] 32 | ---- 33 | bob 34 | bob@localhost 35 | bob 36 | bob jones company com> 37 | Bob Jones 38 | Joe Smith 39 | ---- 40 | 41 | Bu örnekte, aynı kişi (Bob), dört farklı ad altında değişiklik setleri oluşturmuştur; bunlardan biri Git katkısı için doğru görünürken, biri tamamen geçersiz olacaktır. 42 | Hg-fast-export her bir satırı bir kurala dönüştürerek bunu düzeltmemize izin verir: `""=""`, bir `` 'i bir `<çıkış>` 'a eşleyen bir kural. 43 | `` ve `<çıkış>` dizelerinin içinde, python `string_escape` kodlaması tarafından anlaşılan tüm kaçış dizileri desteklenir. 44 | Eğer yazar eşleştirme dosyası eşleşen bir `` içermiyorsa, bu yazar Git'e değiştirilmeden gönderilecektir. 45 | Eğer tüm kullanıcı adları uygun görünüyorsa, bu dosyaya hiç ihtiyacımız olmayacaktır. 46 | Bu örnekte, dosyamızın şu şekilde görünmesini istiyoruz: 47 | 48 | [source] 49 | ---- 50 | "bob"="Bob Jones " 51 | "bob@localhost"="Bob Jones " 52 | "bob "="Bob Jones " 53 | "bob jones company com>"="Bob Jones " 54 | ---- 55 | 56 | Aynı türdeki eşleştirme dosyası, Mercurial adı Git tarafından izin verilmediğinde dalları ve etiketleri yeniden adlandırmak için de kullanılabilir. 57 | 58 | Bir sonraki adım, yeni Git reposunu oluşturmak ve dışa aktarma komut dosyasını çalıştırmaktır: 59 | 60 | [source,console] 61 | ---- 62 | $ git init /tmp/converted 63 | $ cd /tmp/converted 64 | $ /tmp/fast-export/hg-fast-export.sh -r /tmp/hg-repo -A /tmp/authors 65 | ---- 66 | 67 | `-r` bayrağı, dönüştürmek istediğimiz Mercurial reposunu bulması için hg-fast-export'a nerede bakacağını ve `-A` bayrağı da yazar eşleştirme dosyasını nerede bulacağını söyler (dallar ve etiket eşleştirme dosyaları sırasıyla `-B` ve `-T` bayrakları ile belirtilir). 68 | Betik Mercurial değişiklik setlerini ayrıştırır ve bunları Git'in "fast-import" özelliği için bir betiğe dönüştürür (bu özelliği biraz sonra detaylı bir şekilde inceleyeceğiz). 69 | Bu biraz zaman alır (ancak ağ üzerinden yapılmasından _çok_ daha hızlıdır) ancak çıktı oldukça ayrıntılıdır: 70 | 71 | [source,console] 72 | ---- 73 | $ /tmp/fast-export/hg-fast-export.sh -r /tmp/hg-repo -A /tmp/authors 74 | Loaded 4 authors 75 | master: Exporting full revision 1/22208 with 13/0/0 added/changed/removed files 76 | master: Exporting simple delta revision 2/22208 with 1/1/0 added/changed/removed files 77 | master: Exporting simple delta revision 3/22208 with 0/1/0 added/changed/removed files 78 | […] 79 | master: Exporting simple delta revision 22206/22208 with 0/4/0 added/changed/removed files 80 | master: Exporting simple delta revision 22207/22208 with 0/2/0 added/changed/removed files 81 | master: Exporting thorough delta revision 22208/22208 with 3/213/0 added/changed/removed files 82 | Exporting tag [0.4c] at [hg r9] [git :10] 83 | Exporting tag [0.4d] at [hg r16] [git :17] 84 | […] 85 | Exporting tag [3.1-rc] at [hg r21926] [git :21927] 86 | Exporting tag [3.1] at [hg r21973] [git :21974] 87 | Issued 22315 commands 88 | git-fast-import statistics: 89 | --------------------------------------------------------------------- 90 | Alloc'd objects: 120000 91 | Total objects: 115032 ( 208171 duplicates ) 92 | blobs : 40504 ( 205320 duplicates 26117 deltas of 39602 attempts) 93 | trees : 52320 ( 2851 duplicates 47467 deltas of 47599 attempts) 94 | commits: 22208 ( 0 duplicates 0 deltas of 0 attempts) 95 | tags : 0 ( 0 duplicates 0 deltas of 0 attempts) 96 | Total branches: 109 ( 2 loads ) 97 | marks: 1048576 ( 22208 unique ) 98 | atoms: 1952 99 | Memory total: 7860 KiB 100 | pools: 2235 KiB 101 | objects: 5625 KiB 102 | --------------------------------------------------------------------- 103 | pack_report: getpagesize() = 4096 104 | pack_report: core.packedGitWindowSize = 1073741824 105 | pack_report: core.packedGitLimit = 8589934592 106 | pack_report: pack_used_ctr = 90430 107 | pack_report: pack_mmap_calls = 46771 108 | pack_report: pack_open_windows = 1 / 1 109 | pack_report: pack_mapped = 340852700 / 340852700 110 | --------------------------------------------------------------------- 111 | 112 | $ git shortlog -sn 113 | 369 Bob Jones 114 | 365 Joe Smith 115 | ---- 116 | 117 | İşte hepsi bu kadar. 118 | Tüm Mercurial etiketleri Git etiketlerine, Mercurial dalları ve yer imleri de Git dallarına dönüştürülmüştür. 119 | Şimdi, reponuzu yeni sunucu ana dizinine gönderecek durumdasınız: 120 | 121 | [source,console] 122 | ---- 123 | $ git remote add origin git@my-git-server:myrepository.git 124 | $ git push origin --all 125 | ---- 126 | -------------------------------------------------------------------------------- /book/09-git-and-other-scms/sections/import-p4.asc: -------------------------------------------------------------------------------- 1 | [[_perforce_import]] 2 | ==== Perforce 3 | 4 | (((Perforce)))(((Importing, from Perforce))) 5 | İçe aktarmayı inceleyeceğimiz bir sonraki sistem Perforce'tur. 6 | Yukarıda belirttiğimiz gibi Git ve Perforce'un birbirleriyle konuşmasına izin vermenin iki yolu vardır: git-p4 ve Perforce Git Fusion. 7 | 8 | ===== Perforce Git Fusion 9 | 10 | Git Fusion bu süreci oldukça ağrısız hale getirir. 11 | Proje ayarlarınızı, kullanıcı eşlemelerinizi ve dallarınızı bir yapılandırma dosyası kullanarak (<<_p4_git_fusion>> bölümünde anlatıldığı gibi) yapılandırın ve repoyu kopyalayın. 12 | Git Fusion size yerel bir Git reposuna benzer bir şey bırakır. Bunu daha sonra isterseniz yerel bir Git ana bilgisayarına gönderebilirsiniz. 13 | İsterseniz Perforce'u Git sunucunuz olarak bile kullanabilirsiniz. 14 | 15 | [[_git_p4]] 16 | ===== Git-p4 17 | 18 | Git-p4 aynı zamanda bir içe aktarma aracı görevi de görebilir. 19 | Örnek olarak Jam projesini "Perforce Public Depot" 'dan içe aktaracağız. 20 | İstemcinizi kurmak için P4PORT ortam değişkenini Perforce deposunu işaret edecek şekilde dışa aktarmanız gerekir: 21 | 22 | [source,console] 23 | ---- 24 | $ export P4PORT=public.perforce.com:1666 25 | ---- 26 | 27 | [NOTE] 28 | ==== 29 | Takip etmek için bağlantı kurabileceğiniz bir Perforce deposuna ihtiyacınız olacak. 30 | Örneklerimiz için public.perforce.com adresindeki genel depoyu kullanacağız, ancak erişiminiz olan herhangi bir depoyu da kullanabilirsiniz. 31 | ==== 32 | 33 | (((git commands, p4))) 34 | Jam projesini Perforce sunucusundan içe aktarmak için depo ve proje yolunu ve projeyi içe aktarmak istediğiniz yolu sağlayarak `git p4 clone` komutunu çalıştırın: 35 | 36 | [source,console] 37 | ---- 38 | $ git-p4 clone //guest/perforce_software/jam@all p4import 39 | Importing from //guest/perforce_software/jam@all into p4import 40 | Initialized empty Git repository in /private/tmp/p4import/.git/ 41 | Import destination: refs/remotes/p4/master 42 | Importing revision 9957 (100%) 43 | ---- 44 | 45 | Bu özel projenin yalnızca bir dalı vardır, ancak dal görünümleriyle (veya yalnızca bir dizin kümesi) yapılandırılmış dallarınız varsa; tüm dosyaları ve projenin alt dallarını içe aktarmak için `--detect-branches` işaretini `git p4 clone` komutuna ekleyerek kullanabilirsiniz. 46 | Bu konuda biraz daha ayrıntılı bilgi için <<_git_p4_branches>> konusuna bakın. 47 | 48 | Bu noktada işiniz neredeyse bitti. 49 | `p4import` dizinine gidip `git log` çalıştırırsanız, içe aktarılan çalışmanızı görebilirsiniz: 50 | 51 | [source,console] 52 | ---- 53 | $ git log -2 54 | commit e5da1c909e5db3036475419f6379f2c73710c4e6 55 | Author: giles 56 | Date: Wed Feb 8 03:13:27 2012 -0800 57 | 58 | Correction to line 355; change to . 59 | 60 | [git-p4: depot-paths = "//public/jam/src/": change = 8068] 61 | 62 | commit aa21359a0a135dda85c50a7f7cf249e4f7b8fd98 63 | Author: kwirth 64 | Date: Tue Jul 7 01:35:51 2009 -0800 65 | 66 | Fix spelling error on Jam doc page (cummulative -> cumulative). 67 | 68 | [git-p4: depot-paths = "//public/jam/src/": change = 7304] 69 | ---- 70 | 71 | `git-p4` 'ün her katkı mesajında ​​bir tanımlayıcı bıraktığını görebilirsiniz. 72 | Daha sonra Perforce değişiklik numarasına başvurmanız gerekebileceği ihtimaline karşı, bu tanımlayıcıyı orada tutmanızda bir sakınca yoktur. 73 | Ancak tanımlayıcıyı kaldırmak isterseniz (ki yeni repo üzerinde çalışmaya başlamadan önce bunu yapmanın tam zamanıdır), 74 | (((git komutları, filtre-dal))) 75 | tanımlayıcı dizeleri topluca kaldırmak için `git filter-branch` 'ı kullanabilirsiniz: 76 | 77 | [source,console] 78 | ---- 79 | $ git filter-branch --msg-filter 'sed -e "/^\[git-p4:/d"' 80 | Rewrite e5da1c909e5db3036475419f6379f2c73710c4e6 (125/125) 81 | Ref 'refs/heads/master' was rewritten 82 | ---- 83 | 84 | `git log` 'u çalıştırırsanız, katkılara ilişkin tüm SHA-1 sağlama toplamlarının değiştiğini, ancak `git-p4` dizelerinin artık katkı mesajlarında olmadığını görebilirsiniz: 85 | 86 | [source,console] 87 | ---- 88 | $ git log -2 89 | commit b17341801ed838d97f7800a54a6f9b95750839b7 90 | Author: giles 91 | Date: Wed Feb 8 03:13:27 2012 -0800 92 | 93 | Correction to line 355; change to . 94 | 95 | commit 3e68c2e26cd89cb983eb52c024ecdfba1d6b3fff 96 | Author: kwirth 97 | Date: Tue Jul 7 01:35:51 2009 -0800 98 | 99 | Fix spelling error on Jam doc page (cummulative -> cumulative). 100 | ---- 101 | 102 | İçe aktarma işleminiz yeni Git sunucunuza gönderilmeye hazırdır. 103 | -------------------------------------------------------------------------------- /book/09-git-and-other-scms/sections/import-svn.asc: -------------------------------------------------------------------------------- 1 | ==== Subversion 2 | 3 | (((Subversion))) 4 | (((Importing, from Subversion))) 5 | `git svn` kullanımıyla ilgili önceki bölümü okuduysanız, bir repoyu svn ile kopyalamak (`git svn clone`) için bu talimatları kolayca kullanabilirsiniz: Sonra Subversion sunucusunu durdurup, yeni bir Git sunucusuna itin ve onu kullanmaya başlayın. 6 | Geçmişi istiyorsanız, bunu Subversion sunucusundan verileri çektiğiniz kadar hızlı bir şekilde gerçekleştirebilirsiniz (bu biraz zaman alabilir). 7 | 8 | Ancak içe aktarma tamamen mükemmel değildir; çok uzun süreceği için bunu doğru yapsanız iyi olur. 9 | İlk sorun yazar bilgisidir. 10 | Subversion'da katkıda bulunan her kişinin sistemde katkı bilgilerinde kayıtlı bir kullanıcısı vardır. 11 | Önceki bölümdeki örneklerde, `blame` çıktısı ve `git svn log` gibi bazı yerlerde `schacon` gösterilmektedir. 12 | Bunu daha iyi Git yazar verileriyle eşleştirmek istiyorsanız, Subversion kullanıcılarından Git yazarlarına bir eşleştirmeye ihtiyacınız vardır. 13 | Bu eşlemeyi şu şekilde içeren `users.txt` adlı bir dosya oluşturun: 14 | 15 | [source] 16 | ---- 17 | schacon = Scott Chacon 18 | selse = Someo Nelse 19 | ---- 20 | 21 | SVN'nin kullandığı yazar adlarının bir listesini almak için şunu çalıştırabilirsiniz: 22 | 23 | [source,console] 24 | ---- 25 | $ svn log --xml --quiet | grep author | sort -u | \ 26 | perl -pe 's/.*>(.*?)<.*/$1 = /' 27 | ---- 28 | 29 | Bu komut dizini günlük (log) çıktısını XML biçiminde oluşturur, ardından yalnızca yazar bilgilerinin bulunduğu satırları tutar, yinelenenleri atar ve XML etiketlerini çıkarır (Bariz şekilde, bu yalnızca 'grep', 'sort' ve 'Perl' yüklü bir makinede çalışır.) 30 | Ardından, her girişin yanına eşdeğer Git kullanıcı verilerini ekleyebilmeniz için bu çıktıyı `users.txt` dosyanıza yönlendirin. 31 | 32 | Yazar verilerini daha doğru bir şekilde eşleştirmesine yardımcı olmak için bu dosyayı `git svn` 'ye sağlayabilirsiniz. 33 | Ayrıca, `clone` veya `init` komutuna `--no-metadata` seçeneğini ileterek, `git svn` 'ye Subversion'ın normalde içe aktardığı meta verileri eklememesini de söyleyebilirsiniz (ancak senkronizasyon meta verilerini korumak istiyorsanız, bu parametreyi atlamakta özgürsünüz). 34 | Bu, `import` komutunuzun şu şekilde görünmesini sağlar: 35 | 36 | [source,console] 37 | ---- 38 | $ git svn clone http://my-project.googlecode.com/svn/ \ 39 | --authors-file=users.txt --no-metadata --prefix "" -s my_project 40 | $ cd my_project 41 | ---- 42 | 43 | Artık `my_project` dizininizde daha güzel bir Subversion içe aktarımına sahip olmalısınız. 44 | Buna benzeyen katkılar yerine 45 | 46 | [source] 47 | ---- 48 | commit 37efa680e8473b615de980fa935944215428a35a 49 | Author: schacon 50 | Date: Sun May 3 00:12:22 2009 +0000 51 | 52 | fixed install - go to trunk 53 | 54 | git-svn-id: https://my-project.googlecode.com/svn/trunk@94 4c93b258-373f-11de- 55 | be05-5f7a86268029 56 | ---- 57 | 58 | şunun gibi: 59 | 60 | [source] 61 | ---- 62 | commit 03a8785f44c8ea5cdb0e8834b7c8e6c469be2ff2 63 | Author: Scott Chacon 64 | Date: Sun May 3 00:12:22 2009 +0000 65 | 66 | fixed install - go to trunk 67 | ---- 68 | 69 | Yazar alanı çok daha iyi görünmekle kalmıyor, aynı zamanda `git-svn-id` de artık orada değil. 70 | 71 | Ayrıca biraz içe aktarma sonrası temizlik de yapmalısınız. 72 | Bunlardan biri `git svn` 'nin oluşturduğu tuhaf referansları temizlemektir. 73 | Öncelikle etiketleri, tuhaf uzak dallar yerine gerçek etiketler olacak şekilde, ve ardından geri kalan dalları da yerel olacak şekilde taşıyacaksınız. 74 | 75 | Etiketleri uygun Git etiketleri olacak şekilde taşımak için şunu çalıştırın: 76 | 77 | [source,console] 78 | ---- 79 | $ for t in $(git for-each-ref --format='%(refname:short)' refs/remotes/tags); do git tag ${t/tags\//} $t && git branch -D -r $t; done 80 | ---- 81 | 82 | Bu, `refs/remotes/tags/` ile başlayan uzak dal referanslarını alır ve onları gerçek (hafif) etiketler haline getirir. 83 | 84 | Ardından, referansların geri kalanını `refs/remotes` altında yerel şubelere taşıyın: 85 | 86 | [source,console] 87 | ---- 88 | $ for b in $(git for-each-ref --format='%(refname:short)' refs/remotes); do git branch $b refs/remotes/$b && git branch -D -r $b; done 89 | ---- 90 | 91 | Subversion'da yalnızca bir dal görürken, sonuna `@xxx` (burada xxx bir sayıdır) eklenmiş bazı ekstra dallar görebilirsiniz. 92 | Bu aslında ``peg-revizyonlar`` adı verilen bir Subversion özelliğidir ve Git'te sözdizimsel karşılığı olmayan bir şeydir. 93 | Bu nedenle `git svn`, svn sürüm numarasını dal adına ekler (tıpkı o dalın sabit revizyonunu ele almak için svn'de yazdığınız gibi) . 94 | Artık sabit düzeltmeleri umursamıyorsanız, bunları kaldırmanız yeterlidir: 95 | 96 | [source,console] 97 | ---- 98 | $ for p in $(git for-each-ref --format='%(refname:short)' | grep @); do git branch -D $p; done 99 | ---- 100 | 101 | Artık tüm eski dallar gerçek Git dalları ve tüm eski etiketler gerçek Git etiketleridir. 102 | 103 | Temizlenecek son bir şey daha var. 104 | Ne yazık ki, `git svn` Subversion'un varsayılan dalına eşlenen `trunk` adında fazladan bir dal oluşturur, ancak `trunk` ref'i, `master` ile aynı yeri işaret eder. 105 | `master` kelimesi Git'e daha uyggun bir ifade biçimi olduğundan, fazladan dalın nasıl kaldırılacağı aşağıda açıklanmıştır: 106 | 107 | [source,console] 108 | ---- 109 | $ git branch -d trunk 110 | ---- 111 | 112 | Yapılacak son şey, yeni Git sunucunuzu uzak olarak eklemek ve ona itmektir. 113 | Sunucunuzu uzak olarak eklemenin bir örneği: 114 | 115 | [source,console] 116 | ---- 117 | $ git remote add origin git@my-git-server:myrepository.git 118 | ---- 119 | 120 | Tüm dallarınızın ve etiketlerinizin üste çıkmasını istediğiniz için artık şunu çalıştırabilirsiniz: 121 | 122 | [source,console] 123 | ---- 124 | $ git push origin --all 125 | $ git push origin --tags 126 | ---- 127 | 128 | Artık tüm dal ve etiketleriniz güzel ve temiz bir içe aktarma işlemiyle yeni Git sunucunuzda olmalıdır. 129 | -------------------------------------------------------------------------------- /book/09-git-and-other-scms/sections/import-tfs.asc: -------------------------------------------------------------------------------- 1 | [[_git_tfs]] 2 | ==== TFS 3 | 4 | (((TFS)))(((Importing, from TFS))) 5 | Takımınız kaynak kontrolünü TFVC'den Git'e dönüştürüyorsa, bunu en yüksek doğrulukta gerçekleştirmek isteyeceksiniz. 6 | Ara işlev bölümünde hem git-tfs'i hem de git-tf'yi ele aldığımızı göz önünde bulundurursak, bu bölümde yalnızca git-tfs'i ele alacağımız anlamına gelir. Çünkü git-tfs dallarını destekler ve bunu git-tf ile yapmak oldukça zordur. 7 | 8 | [NOTE] 9 | ==== 10 | Bu tek yönlü bir dönüşümdür. 11 | Oluşan Git reposu, orijinal TFVC projesi ile bağlantı kuramaz. 12 | ==== 13 | 14 | İlk yapmanız gereken şey, kullanıcı adlarını eşlemektir. 15 | TFVC değişiklik setleri için yazar alanına neyin gireceği konusunda oldukça serbesttir, ancak Git okunabilir bir ad ve e-posta adresi ister. 16 | Bu bilgiyi `tf` komut satırı istemcisinden şöyle alabilirsiniz: 17 | 18 | [source,powershell] 19 | ---- 20 | PS> tf history $/myproject -recursive > AUTHORS_TMP 21 | ---- 22 | 23 | Bu projenin tarihindeki tüm değişiklik setlerini alır ve bunları işleyeceğimiz AUTHORS_TMP dosyasına koyar. 24 | 'User' sütununun (ikinci sütun) verilerini çıkarmak için dosyayı açın ve sütunun hangi karakterlerde başladığını ve bittiğini bulun, ardından aşağıdaki komut satırındaki `cut` komutunun `11-20` parametrelerini bulunanlarla değiştirin: 25 | 26 | [source,powershell] 27 | ---- 28 | PS> cat AUTHORS_TMP | cut -b 11-20 | tail -n+3 | sort | uniq > AUTHORS 29 | ---- 30 | 31 | `cut` komutu her satırdan 11 ile 20 arasındaki karakterleri korur. 32 | `tail` komutu başlık alanları ve ASCII alt çizgileri olan ilk iki satırı atlar. 33 | Elde edilen sonuç, yinelenenleri ortadan kaldırmak için `sort` ve `uniq` e yönlendirilir ve `AUTHORS` adında bir dosyaya kaydedilir. 34 | Sonraki adım el ile yapılmalıdır, git-tfs'nin bu dosyayı etkin bir şekilde kullanabilmesi için her satır bu formatta olmalıdır: 35 | 36 | [source,text] 37 | ---- 38 | DOMAIN\username = User Name 39 | ---- 40 | 41 | Sol taraftaki bölüm TFVC'den gelen "Kullanıcı" (user) alanıdır, eşittir işaretinin sağ tarafındaki bölüm ise Git işlemleri için kullanılacak olan kullanıcı adıdır. 42 | 43 | Bu dosyayı aldıktan sonra, yapmanız gereken sıradaki şey ilgilendiğiniz TFVC projesinin bir kopyasını yapmaktır: 44 | 45 | [source,powershell] 46 | ---- 47 | PS> git tfs clone --with-branches --authors=AUTHORS https://username.visualstudio.com/DefaultCollection $/project/Trunk project_git 48 | ---- 49 | 50 | Aşağıdaki komut, katkı mesajlarının altındaki `git-tfs-id` bölümlerini temizleyecektir: 51 | 52 | [source,powershell] 53 | ---- 54 | PS> git filter-branch -f --msg-filter 'sed "s/^git-tfs-id:.*$//g"' '--' --all 55 | ---- 56 | 57 | Bu komut Git-bash ortamındaki `sed` komutunu kullanarak `git-tfs-id:` ile başlayan her satırı boş bir metinle değiştirir ve Git'in bu satırları görmezden gelmesini sağlar. 58 | 59 | Hepsi tamamlandıktan sonra yeni bir uzak repo ekleyebilir, tüm dalları üstakıma itebilir ve ekibinizin Git üzerinden çalışmaya başlamasını sağlayabilirsiniz. 60 | -------------------------------------------------------------------------------- /book/10-git-internals/sections/plumbing-porcelain.asc: -------------------------------------------------------------------------------- 1 | [[_plumbing_porcelain]] 2 | === Tesisat ve Döşeme (Plumbing ve Porcelain) 3 | 4 | Bu kitap, `checkout`, `branch`, `remote` gibi yaklaşık 30 alt komutla Git'in nasıl kullanılacağını anlatır. 5 | Ancak, Git başlangıçta tamamen kullanıcı dostu bir sürüm kontrol sistemi olmaktan ziyade bir araç seti olarak tasarlandığı için, düşük seviyeli işler yapan ve UNIX tarzında birbirine zincirlenebilen veya betiklerden çağrılabilen bir dizi alt komut içerir. 6 | 7 | Bu komutlar genellikle Git'in "tesisat" (plumbing) komutları olarak adlandırılırken, daha kullanıcı dostu komutlar "döşeme" (porcelain) komutları olarak adlandırılır. 8 | 9 | Şu ana kadar fark etmiş olabileceğiniz gibi, bu kitabın ilk dokuz bölümü neredeyse tamamen "döşeme" komutlarıyla ilgilidir. 10 | Ancak bu bölümde, Git'in iç işleyişine erişim sağladığı ve Git'in birşeyleri nasıl ve neden yaptığını göstermek için, çoğunlukla daha düşük seviyeli "tesisat" komutlarla ilgileneceksiniz. 11 | Bu komutların çoğu, komut satırında manuel olarak kullanılmaktan ziyade, yeni araçlar ve özel betikler için yapı taşları olarak kullanılmak üzere tasarlanmıştır. 12 | 13 | Yeni veya varolan bir dizinde `git init` komutunu çalıştırdığınızda, Git `.git` adında neredeyse herşeyin saklandığı ve manipüle edildiği bir dizin oluşturur. 14 | Reponuzu yedeklemek veya kopyalamak isterseniz, bu tek dizini başka bir yere kopyalamak neredeyse ihtiyacınız olan her şeyi size sağlar. 15 | Bu bölüm temel olarak, bu dizinde görebileceğiniz şeylerle ilgilidir. 16 | 17 | Yeni başlatılmış bir `.git` dizini genellikle şöyle görünür: 18 | 19 | [source,console] 20 | ---- 21 | $ ls -F1 22 | config 23 | description 24 | HEAD 25 | hooks/ 26 | info/ 27 | objects/ 28 | refs/ 29 | ---- 30 | 31 | Kullandığınız Git sürümüne bağlı olarak bazı ek içerikler görebilirsiniz, ancak yeni bir `git init` reposu böyledir (varsayılan olarak gördüğünüz şey budur). 32 | `description` dosyası yalnızca GitWeb programı tarafından kullanılır, bu yüzden endişelenmeyin. 33 | `config` dosyası, projenize özgü yapılandırma seçeneklerinizi içerir ve `info` dizini, bir `.gitignore` dosyasında izlemek istemediğiniz dışlanan desenler için genel bir dışlama dosyasını (((excludes))). 34 | `hooks` dizini, istemci veya sunucu tarafı kancalarınızı içerir ve bunlar <> bölümünde detaylı olarak ele alınmaktadır. 35 | 36 | Bu, dört önemli giriş bırakır: `HEAD` (henüz oluşturulmamıştır), `index` dosyaları, `objects` ve `refs` dizinleri. 37 | Bunlar Git'in temel parçalarıdır. 38 | `objects` dizini veritabanınızın tüm içeriğini depolar, `refs` dizini bu verideki katkı nesnesi işaretçilerini depolar (dallar, etiketler, uzaklar ve daha fazlası), `HEAD` dosyası şu anda bulunduğunuz dalı gösterir ve `index` dosyası ise Git'in izlem alanı bilgilerinizi depoladığı yerdir. 39 | Şimdi Git'in nasıl çalıştığını görmek için bu bölümlerin her birine detaylı olarak bakacağız. 40 | -------------------------------------------------------------------------------- /book/10-git-internals/sections/refspec.asc: -------------------------------------------------------------------------------- 1 | [[_refspec]] 2 | === Refspec 3 | 4 | Kitabın tamamında, uzak dallardan yerel referanslara basit eşlemeler kullandık, ancak bunlar daha karmaşık olabilir. 5 | Son birkaç bölümü takip edip küçük bir yerel Git reposu oluşturduysanız ve şimdi ona bir _uzak repo_ eklemek istiyorsanız: 6 | 7 | [source,console] 8 | ---- 9 | $ git remote add origin https://github.com/schacon/simplegit-progit 10 | ---- 11 | 12 | Yukarıdaki komutu çalıştırmak, repo `.git/config` dosyanıza bir bölüm ekler. 13 | Bu bölüm, uzak repo adını (`origin`), uzak repo adresini ve alım için kullanılacak _refspec_ 'i belirtir: 14 | 15 | [source,ini] 16 | ---- 17 | [remote "origin"] 18 | url = https://github.com/schacon/simplegit-progit 19 | fetch = +refs/heads/*:refs/remotes/origin/* 20 | ---- 21 | 22 | Refspec'in formatı, öncelikle isteğe bağlı bir "+" içerir, ardından `:` gelir; burada `` uzak taraftaki referanslar için desen ve `` bu referansların yerel olarak izleneceği yerdir. 23 | "+" Git'e, hızlı ileri-sarma olmasa bile referansın güncellenmesini bildirir. 24 | 25 | Git `git remote add origin` komutuyla otomatik (varsayılan) olarak sunucudaki `refs/heads/` altındaki tüm referansları alır ve bunları yerel olarak `refs/remotes/origin/` 'e yazar. 26 | Dolayısıyla sunucuda `master` dalı varsa, bu dala yerel olarak aşağıdakilerden herhangi biri aracılığıyla erişebilirsiniz: 27 | 28 | [source,console] 29 | ---- 30 | $ git log origin/master 31 | $ git log remotes/origin/master 32 | $ git log refs/remotes/origin/master 33 | ---- 34 | 35 | Git her birini `refs/remotes/origin/master` 'a genişlettiği için hepsi eşdeğerdir. 36 | 37 | Eğer Git'in her seferinde yalnızca `master` dalını çekmesini ve uzak sunucudaki diğer tüm dalları değil değiştirmesini istiyorsanız, alım satırını sadece o dala referans gösterecek şekilde değiştirebilirsiniz: 38 | 39 | [source] 40 | ---- 41 | fetch = +refs/heads/master:refs/remotes/origin/master 42 | ---- 43 | 44 | Bu o uzak reponun `git fetch` komutu için varsayılan refspec'tir. 45 | Bir defalık bir çekme yapmak istiyorsanız, özel refspec'i komut satırında da belirtebilirsiniz. 46 | Uzak sunucudaki `master` dalını yerel olarak `origin/mymaster`'a çekmek için şunu çalıştırabilirsiniz: 47 | 48 | [source,console] 49 | ---- 50 | $ git fetch origin master:refs/remotes/origin/mymaster 51 | ---- 52 | 53 | Ayrıca birden fazla refspec belirtebilirsiniz. 54 | Komut satırında, birkaç dalı şu şekilde indirebilirsiniz: 55 | 56 | [source,console] 57 | ---- 58 | $ git fetch origin master:refs/remotes/origin/mymaster \ 59 | topic:refs/remotes/origin/topic 60 | From git@github.com:schacon/simplegit 61 | ! [rejected] master -> origin/mymaster (non fast forward) 62 | * [new branch] topic -> origin/topic 63 | ---- 64 | 65 | Burada bir hızlı ileri-sarma referansı olarak listelenmediği için `master` dalının çekilmesi reddedildi. 66 | Bunu, refspec'in önüne `+` belirterek geçersiz kılabilirsiniz. 67 | 68 | Ayrıca, yapılandırma dosyanızda çekme için birden fazla refspec belirtebilirsiniz. 69 | Her zaman `origin` uzak sunucusundan `master` ve `experiment` dallarını almak istiyorsanız, iki satır ekleyin: 70 | 71 | [source,ini] 72 | ---- 73 | [remote "origin"] 74 | url = https://github.com/schacon/simplegit-progit 75 | fetch = +refs/heads/master:refs/remotes/origin/master 76 | fetch = +refs/heads/experiment:refs/remotes/origin/experiment 77 | ---- 78 | 79 | Desende kısmi globlar kullanamazsınız, yoksa bu geçersiz olur: 80 | 81 | [source,ini] 82 | ---- 83 | fetch = +refs/heads/qa*:refs/remotes/origin/qa* 84 | ---- 85 | 86 | Ancak, bunun gibi bir şeyi başarmak için ad-alanlarını (veya dizinleri) kullanabilirsiniz. 87 | Eğer bir dizi dalı iten bir QA ekibiniz varsa ve siz `master` dalıyla QA ekibinin dallarından herhangi biri dışında hiçbiryerden çekme yapmak istemiyorsanız, şu şekilde bir yapılandırma bölümü kullanabilirsiniz: 88 | 89 | [source,ini] 90 | ---- 91 | [remote "origin"] 92 | url = https://github.com/schacon/simplegit-progit 93 | fetch = +refs/heads/master:refs/remotes/origin/master 94 | fetch = +refs/heads/qa/*:refs/remotes/origin/qa/* 95 | ---- 96 | 97 | Eğer bir QA ekibi, geliştiriciler ve entegrasyon ekiplerinin uzak dalları itip işbirliği yaptığı, karmaşık bir iş akışı süreciniz varsa, hepsini bu şekilde kolayca ad-alanına çekebilirsiniz. 98 | 99 | [[_pushing_refspecs]] 100 | ==== Refspec'leri İtmek 101 | 102 | Ad-alanlı referansları bu şekilde alabilmeniz güzel, ancak QA ekibi dallarını `qa/` ad-alanına nasıl alır? 103 | Bunu, refspecs'i itmek için kullanarak başarırsınız. 104 | 105 | Eğer QA ekibi `master` dalını uzak sunucuda `qa/master`'a itmek istiyorsa, şunu çalıştırabilirler: 106 | 107 | [source,console] 108 | ---- 109 | $ git push origin master:refs/heads/qa/master 110 | ---- 111 | 112 | Her seferinde `git push origin` çalıştıklarında Git'in bunu otomatik olarak yapmasını istiyorlarsa, yapılandırma dosyalarına bir `push` değeri ekleyebilirler: 113 | 114 | [source,ini] 115 | ---- 116 | [remote "origin"] 117 | url = https://github.com/schacon/simplegit-progit 118 | fetch = +refs/heads/*:refs/remotes/origin/* 119 | push = refs/heads/master:refs/heads/qa/master 120 | ---- 121 | 122 | Tekrar belirtmek gerekirse, bu yapılan varsayılan olarak yerel `master` dalının uzak `qa/master` dala itilmesine neden olacaktır. 123 | 124 | [NOTE] 125 | ==== 126 | Refspec'i bir repodan almak ve başka bir repoya itmekte kullanamazsınız. 127 | Bunu yapacak bir örnek için <> bölümüne başvurabilirsiniz. 128 | ==== 129 | 130 | ==== Referansları Silmek 131 | 132 | Ayrıca, şuna benzer bir şey çalıştırarak refspec'i uzak sunucudan referansları silmek için kullanabilirsiniz: 133 | 134 | [source,console] 135 | ---- 136 | $ git push origin :topic 137 | ---- 138 | 139 | Refspec `:` olduğundan, `` kısmını kırparak, uzak sunucudaki `topic` dalını hiçbir şeye getirebilirsiniz (yani silersiniz). 140 | 141 | Ya da daha yeni sözdizimini kullanabilirsiniz (Git v1.7.0'dan itibaren kullanılmaktadır): 142 | 143 | [source,console] 144 | ---- 145 | $ git push origin --delete topic 146 | ---- 147 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/bash.asc: -------------------------------------------------------------------------------- 1 | === Bash ile Git 2 | 3 | (((bash)))(((tab completion, bash)))(((shell prompts, bash))) 4 | Bir Bash kullanıcısıysanız, Git deneyiminizi daha kolay bir hale getirmek için shell'in bazı özelliklerini kullanabilirsiniz. 5 | Git aslında, birkaç shell için eklentilerle birlikte gelir, ancak onları varsayılan olarak etkinleştirmez. 6 | 7 | İlk olarak, Git kaynak kodundan `contrib/completion/git-completion.bash` dosyasının bir kopyasını almanız gerekir. 8 | Onu ana dizininiz gibi uygun bir yere kopyalayın ve `.bashrc` dosyanıza şunu ekleyin: 9 | 10 | [source,console] 11 | ----- 12 | . ~/git-completion.bash 13 | ----- 14 | 15 | Bu işlem tamamlandıktan sonra dizininizi Git reposuyla değiştirin ve şunu yazın: 16 | 17 | [source,console] 18 | ---- 19 | $ git chec 20 | ---- 21 | 22 | …ve Bash, `git checkout` 'ı otomatik olarak tamamlar. 23 | Bu, Git'in tüm alt komutları, komut satırı parametreleri ve uygun olduğunda uzak ve referans isimleriyle çalışır. 24 | 25 | Ayrıca, mevcut dizinin Git reposu hakkında bilgi göstermek için özel bir belirteç oluşturmak da faydalı olabilir. 26 | Bu istediğiniz kadar basit veya karmaşık olabilir, ancak genellikle çoğu insanın istediği birkaç temel bilgi vardır; bunlar arasında mevcut dal ve çalışma dizininin durumu bulunur. 27 | Bu bilgileri belirtecinize eklemek için, sadece Git'in kaynak reposundan `contrib/completion/git-prompt.sh` dosyasını ana dizinize kopyalayın ve `.bashrc` dosyanıza şuna benzer bir şey ekleyin: 28 | 29 | [source,console] 30 | ----- 31 | . ~/git-prompt.sh 32 | export GIT_PS1_SHOWDIRTYSTATE=1 33 | export PS1='\w$(__git_ps1 " (%s)")\$ ' 34 | ----- 35 | 36 | `\w`, mevcut çalışma dizinini yazdırmak anlamına gelir, `\$` ise belirtecin `$` kısmını yazdırır ve `__git_ps1 " (%s)"` ise `git-prompt.sh` tarafından sağlanan bir işlevi biçimlendirme argümanı ile çağırır. 37 | Şimdi herhangi bir Git denetimli projenin içindeyken bash belirteciniz şu şekilde görünecektir: 38 | 39 | .Özelleştirilmiş `bash` belirteci. 40 | image::images/git-bash.png[Özelleştirilmiş `bash` belirteci.] 41 | 42 | Bu betiklerin her ikisi de yararlı belgelendirmelerle birlikte gelir; daha fazla bilgi için `git-completion.bash` ve `git-prompt.sh` dosyalarının içeriğine göz atın. 43 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/eclipse.asc: -------------------------------------------------------------------------------- 1 | === Eclipse ile Git 2 | 3 | (((Eclipse))) 4 | Eclipse, Git işlemleri için oldukça kapsamlı bir arayüz sağlayan Egit adlı bir eklenti ile birlikte gelir. 5 | Buna Git Perspective'a geçerek erişilir (Window > Open Perspective > Other…, ve "Git" seçin). 6 | 7 | .Eclipse'in EGit ortamı. 8 | image::images/egit.png[Eclipse'in EGit ortamı.] 9 | 10 | EGit, bol miktarda harika belgelendirme ile birlikte gelir: bunlara Help > Help Contents, ve "EGit Documentation" 'ı seçerek erişebilirsiniz. 11 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/powershell.asc: -------------------------------------------------------------------------------- 1 | [[_git_powershell]] 2 | === PowerShell ile Git 3 | 4 | (((powershell)))(((tab completion, powershell)))(((shell prompts, powershell))) 5 | (((posh-git))) 6 | Windows'un eski komut satırı terminali (`cmd.exe`) özelleştirilmiş bir Git deneyimi için pek de uygun değil, ancak PowerShell kullanıyorsanız şanslısınız demektir. 7 | Linux veya macOS üzerinde PowerShell Core çalıştırdığınızda da bu durum geçerlidir. 8 | Posh-git (https://github.com/dahlbyk/posh-git[]) adlı bir paket, güçlü sekme tamamlama olanakları sağlar ve size repo durumunuzu takip etmenize yardımcı olmak için gelişmiş bir ipucu sunar. 9 | Görünümü şuna benzer: 10 | 11 | .Posh-git'le PowerShell. 12 | image::images/posh-git.png[Posh-git'le PowerShell.] 13 | 14 | ==== Kurulum 15 | ===== Gereksinimler (Windows için) 16 | Makinenizde PowerShell komut dosyalarını çalıştırabilmek için, yerel ExecutionPolicy ayarını RemoteSigned olarak belirlemeniz gerekecektir (Temelde Tanımsız ve Kısıtlanmış harici her seçenek). 17 | Eğer AllSigned seçeneğini tercih ederseniz, kendi yazdığınız yerel komut dosyalarının da çalıştırılabilmesi için dijital olarak imzalanmış olmaları gerekir. 18 | RemoteSigned seçeneğiyle, "ZoneIdentifier" özelliği "Internet" olarak ayarlanmış olan (webden indirilmiş) komut dosyalarının imzalanmış olması gerekir, diğerleri için gerek yoktur. 19 | 20 | Eğer bir yöneticiyseniz ve bu ayarı makinedeki tüm kullanıcılar için belirlemek istiyorsanız, "-Scope LocalMachine" kullanın. 21 | Eğer yönetici yetkileri olmayan sıradan bir kullanıcıysanız, "-Scope CurrentUser" kullanarak sadece kendiniz için ayarlayabilirsiniz. 22 | 23 | Daha fazla bilgi için: 24 | - PowerShell Kapsamları: [PowerShell Scopes](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scopes) 25 | - PowerShell ExecutionPolicy: [PowerShell ExecutionPolicy](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy) 26 | 27 | [source,powershell] 28 | ----- 29 | > Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy RemoteSigned -Force 30 | ----- 31 | 32 | ===== PowerShell Galerisi 33 | Eğer en az PowerShell 5 veya Paket Yönetimi kurulu PowerShell 4'e sahipseniz, paket yöneticisini kullanarak posh-git'i kurabilirsiniz. 34 | 35 | PowerShell Galerisi hakkında daha fazla bilgi için: [PowerShell Gallery Overview](https://docs.microsoft.com/en-us/powershell/gallery/overview) 36 | 37 | [source,powershell] 38 | ----- 39 | > Install-Module posh-git -Scope CurrentUser -Force 40 | > Install-Module posh-git -Scope CurrentUser -AllowPrerelease -Force # Newer beta version with PowerShell Core support 41 | ----- 42 | Eğer posh-git'i tüm kullanıcılar için kurmak istiyorsanız, "-Scope AllUsers" kullanın ve komutu "yönetici ayrıcalıklarına sahip" bir PowerShell konsolundan çalıştırın. 43 | İkinci komut `Module 'PowerShellGet' was not installed by using Install-Module` gibi bir hata alırsa, önce başka bir komut çalıştırmanız gerekecektir: 44 | 45 | [source,powershell] 46 | ---- 47 | > Install-Module PowerShellGet -Force -SkipPublisherCheck 48 | ---- 49 | 50 | Sonra dönüp tekrar deneyebilirsiniz. 51 | Bunun sebebi, Windows PowerShell ile birlikte gelen modüllerin farklı bir yayımlama sertifikası ile imzalanmasıdır. 52 | 53 | ===== PowerShell İstemini Güncelleme 54 | Git bilgisini isteminize dahil etmek için, posh-git modülü içe aktarılmalıdır. 55 | PowerShell her başladığında posh-git'in içe aktarılması için, `Add-PoshGitToProfile` komutunu çalıştırın: bu komut içe aktarma ifadesini `$profile` betiğinize ekler. 56 | Bu betik, her yeni PowerShell konsolu açıldığında yürütülür. 57 | Birden fazla $profile betiği bulunduğunu unutmayın. 58 | Örneğin: biri konsol için, bir diğeri ise ISE içindir. 59 | 60 | [source,powershell] 61 | ----- 62 | > Import-Module posh-git 63 | > Add-PoshGitToProfile -AllHosts 64 | ----- 65 | 66 | ===== Kaynaktan 67 | (https://github.com/dahlbyk/posh-git[]) adresinden bir posh-git sürümü indirin ve sıkıştırırmış dosyayı açın. 68 | Ardından posh-git.psd1 dosyasının tam yolunu kullanarak modülü içe aktarın: 69 | 70 | [source,powershell] 71 | ----- 72 | > Import-Module \src\posh-git.psd1 73 | > Add-PoshGitToProfile -AllHosts 74 | ----- 75 | 76 | Bu, `profile.ps1` dosyanıza uygun satırı ekleyecektir ve PowerShell'i bir sonraki açışınızda posh-git etkin olacaktır. 77 | İstemde görüntülenen Git durum özeti bilgilerinin açıklaması için bkz.: https://github.com/dahlbyk/posh-git/blob/master/README.md#git-status-summary-information[] 78 | Posh-git isteminizi nasıl özelleştireceğiniz hakkında daha fazla ayrıntı için bkz.: https://github.com/dahlbyk/posh-git/blob/master/README.md#customization-variables[] 79 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/sublimetext.asc: -------------------------------------------------------------------------------- 1 | === Sublime Text ile Git 2 | 3 | Sublime Text'in 3.2 sürümünden itibaren, editörde git entegrasyonu bulunmaktadır. 4 | 5 | Özellikler şunlardır: 6 | 7 | * Kenar çubuğu, dosya ve klasörlerin git durumunu bir rozet/simgelerle gösterir. 8 | * .gitignore dosyanızda bulunan dosya ve klasörler kenar çubuğunda soluk renkte gösterilir. 9 | * Durum çubuğunda, mevcut git dalını ve yaptığınız değişiklik sayısını görebilirsiniz. 10 | * Bir dosyadaki tüm değişiklikler artık kenar boşluğundaki işaretleyiciler aracılığıyla görülebilir. 11 | * Sublime Text içinden Sublime Merge Git istemcisi işlevselliğinin bir kısmını kullanabilirsiniz. 12 | (Bu, Sublime Merge'in yüklü olmasını gerektirir. Bkz: [Sublime Merge](https://www.sublimemerge.com/)) 13 | 14 | Sublime Text'in resmi kılavuzuna şuradan ulaşabilirsiniz: https://www.sublimetext.com/docs/3/git_integration.html[] 15 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/visualstudio.asc: -------------------------------------------------------------------------------- 1 | === Visual Studio ile Git 2 | 3 | (((Visual Studio))) 4 | Visual Studio 2013 Güncelleme 1'den başlayarak, Visual Studio kullanıcıları doğrudan IDE'lerinde yerleşik bir Git istemcisine sahip olmuştur. 5 | Visual Studio uzun bir süredir kaynak kontrolü entegrasyon özelliklerine sahipti ancak bunlar, merkezi dosya kilitleme sistemlerine yönelikti ve Git bu iş akışı için iyi bir eşleşme değildi. 6 | Visual Studio 2013'ün Git desteği, bu eski özellikten ayrılmıştır ve sonuç olarak Studio ile Git arasında çok daha iyi bir uyum elde edilmiştir. 7 | 8 | Özelliği bulmak için Git tarafından kontrol edilen bir projeyi açın (veya yalnızca mevcut bir projeyi `git init` ile başlatın) ve menüden View > Team Explorer seçin. 9 | Şunun gibi "Connect" (Bağlan) ekranı göreceksiniz: 10 | 11 | .Team Explorer'dan Git reposuna bağlanmak. 12 | image::images/vs-1.png[Team Explorer'dan Git reposuna bağlanmak.] 13 | 14 | Visual Studio, açtığınız Git kontrollü tüm projeleri hatırlar ve bunlar alttaki listede bulunur. 15 | İstediğinizi orada göremiyorsanız, "Add" (Ekle) bağlantısını tıklayın ve çalışma dizininin yolunu yazın. 16 | Yerel Git repolarından birine çift tıklamak sizi <> gibi görünen Ana Sayfa görünümüne yönlendirir. 17 | Burası Git eylemlerini gerçekleştirmek için bir merkezdir; Kod yazarken muhtemelen zamanınızın çoğunu "Changes" (Değişiklikler) sayfasında geçireceksiniz, ancak takım arkadaşlarınızın yaptığı değişiklikleri çekme zamanı geldiğinde "Unsynced Commits" (Senkronize Edilmemiş Katkılar) ve "Branches" (Dallar) sayfasını kullanacaksınız. 18 | 19 | [[vs_home]] 20 | .Visual Studio'da Git reposu için "Giriş" görünümü. 21 | image::images/vs-2.png[Visual Studio'da Git reposu için "Giriş" görünümü.] 22 | 23 | Visual Studio artık Git için güçlü, görev odaklı bir kullanıcı arayüzüne sahip. 24 | Çizgisel bir geçmiş görünümü, bir fark görüntüleyici, uzaktan komutlar ve diğer birçok özelliği içerir. 25 | Bu özelliğe ilişkin eksiksiz hazırlanmış kılavuzlar için, http://msdn.microsoft.com/en-us/library/hh850437.aspx[] adresine gidin. 26 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/visualstudiocode.asc: -------------------------------------------------------------------------------- 1 | === Visual Studio Code ile Git 2 | 3 | Visual Studio Code'un içine yerleştirilmiş bir Git desteği bulunur. 4 | Git desteğinden faydalanabilmek için git sürüm 2.0.0 (veya daha yenisi) yüklü olmalıdır. 5 | 6 | Temel özellikler şunlardır: 7 | 8 | * Düzenlemekte olduğunuz dosyanın farkını cilt payı içinde gösterir. 9 | * Git Durum Çubuğunda (sol altta) geçerli dalı, kirli göstergeleri, gelen ve giden katkıları gösterir. 10 | * En yaygın git işlemlerini düzenleyicinin içinden yapabilirsiniz: 11 | ** Bir repoyu başlatmak. 12 | ** Bir repoyu kopyalamak. 13 | ** Dallar ve etiketler oluşturmak. 14 | ** Değişiklikleri izlemlemek ve katkılamak. 15 | ** Uzak bir dala itmek/çekmek/senkronizasyon yapmak. 16 | ** Birleştirme çakışmalarını çözmek. 17 | ** Farkları görüntülemek. 18 | * Bir uzantıyla GitHub Çekme İsteklerini de yönetebilirsiniz: 19 | https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github[] 20 | 21 | Resmi kılavuza buradan ulaşabilirsiniz: https://code.visualstudio.com/Docs/editor/versioncontrol[] 22 | -------------------------------------------------------------------------------- /book/A-git-in-other-environments/sections/zsh.asc: -------------------------------------------------------------------------------- 1 | === Zsh ile Git 2 | 3 | (((zsh)))(((tab completion, zsh)))(((shell prompts, zsh))) 4 | Zsh, Git için bir sekme tamamlama kütüphanesiyle birlikte gelir. 5 | Bunu kullanmak için, sadece `.zshrc` dosyanızda `autoload -Uz compinit && compinit` komutunu çalıştırmanız yeterlidir. 6 | Zsh'nin arayüzü, Bash'inkinden biraz daha güçlüdür: 7 | 8 | [source,console] 9 | ---- 10 | $ git che 11 | check-attr -- display gitattributes information 12 | check-ref-format -- ensure that a reference name is well formed 13 | checkout -- checkout branch or paths to working tree 14 | checkout-index -- copy files from index to working directory 15 | cherry -- find commits not merged upstream 16 | cherry-pick -- apply changes introduced by some existing commits 17 | ---- 18 | 19 | check-attr -- gitattributes verisini gösterir 20 | check-ref-format -- Referans adının düzgün şekilde oluşturulduğundan emin olur 21 | checkout -- Çalışma dizinine dal veya yolları alır 22 | checkout-index -- Dosyaları dizinden çalışma dizinine kopyalar 23 | cherry -- Üst akımla birleştirilmemiş katkıları bulur 24 | cherry-pick -- Varolan bazı katkılar tarafından getirilen değişiklikleri uygular 25 | 26 | "Belirsiz sekme tamamlamaları" sadece listelenmekle kalmaz, yardımcı açıklamalara da sahiptir ve sekme tuşuna tekrar tekrar basarak listeyi grafiksel olarak gezinebilirsiniz. 27 | Bu özellik Git komut ve argümanları, repo içindekilerin (referanslar ve uzaklar gibi) adları, dosya adları ve Zsh'nin sekme tamamlamayı nasıl gerçekleştireceğini bildiği tüm diğer öğelerle çalışır. 28 | 29 | Zsh, sürüm kontrol sistemlerinden bilgi almak için bir çerçeve olan `vcs_info` ile birlikte gelir. 30 | Sağ tarafta geçerli dalları içeren bir ipucu almak için `~/.zshrc` dosyanıza şu satırları ekleyin: 31 | 32 | [source,console] 33 | ---- 34 | autoload -Uz vcs_info 35 | precmd_vcs_info() { vcs_info } 36 | precmd_functions+=( precmd_vcs_info ) 37 | setopt prompt_subst 38 | RPROMPT=\$vcs_info_msg_0_ 39 | # PROMPT=\$vcs_info_msg_0_'%# ' 40 | zstyle ':vcs_info:git:*' formats '%b' 41 | ---- 42 | 43 | Bu, shell'iniz bir Git reposu içinde olduğunda, terminal penceresinin sağ tarafında geçerli dalın görüntülenmesini sağlar. 44 | (Sol taraf da desteklenir; sadece PROMPT'a yapılan atamayı yorum satırından çıkarın.) 45 | Şöyle görünür: 46 | 47 | .Özelleştirilmiş `zsh` istemi. 48 | image::images/zsh-prompt.png[Özelleştirilmiş `zsh` istemi.] 49 | 50 | vcs_info hakkında daha fazla bilgi için ilgili rehbere 51 | `zshcontrib(1)` kılavuz sayfasından, 52 | veya çevrimiçi olarak http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#Version-Control-Information[] adresinden ulaşabilirsiniz. 53 | 54 | Vcs_info yerine Git ile birlikte gelen `git-prompt.sh` adlı bilgi istemi özelleştirme komut dosyasını tercih edebilirsiniz; Ayrıntılar için https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh[] adresine bakın. 55 | `git-prompt.sh` hem Bash hem de Zsh ile uyumludur. 56 | 57 | Zsh, onu daha iyi hale getirmeye adanmış tüm çerçevelerin bulunacağı kadar güçlüdür. 58 | Bunlardan biri olan "oh-my-zsh" https://github.com/robbyrussell/oh-my-zsh[] adresinde bulunabilir. 59 | oh-my-zsh'in eklenti sistemi güçlü git sekmesi tamamlama özelliğiyle birlikte gelir ve çoğu sürüm kontrol verilerini görüntüleyen çeşitli bilgi istemi "temaları" içerir. 60 | <> bu sistemle neler yapılabileceğinin yalnızca bir örneğidir. 61 | 62 | [[oh_my_zsh_git]] 63 | .Oh-my-zsh temasına bir örnek. 64 | image::images/zsh-oh-my.png[Oh-my-zsh temasına bir örnek.] 65 | -------------------------------------------------------------------------------- /book/B-embedding-git/sections/command-line.asc: -------------------------------------------------------------------------------- 1 | === Git Komut Satırı 2 | 3 | Seçeneklerden biri, bir shell işlemi oluşturmak ve işi yapmak için Git komut satırı aracını kullanmaktır. 4 | Bunun genel kabuledilen olma avantajı vardır ve Git'in tüm özellikleri desteklenir. 5 | Aynı zamanda oldukça kolaydır, çünkü çoğu çalışma zamanı (runtime) ortamı, komut satırı argümanlarıyla bir işlemi çağırmak için nispeten basit bir özelliğe sahiptir. 6 | Ancak bu yaklaşımın bazı eksileri vardır. 7 | 8 | Birincisi, tüm çıktının düz metin halinde olmasıdır. 9 | Bu, ilerleme ve sonuç bilgilerini okumak için, Git'in ara sıra değişen çıktı formatını ayrıştırmanız gerekeceği anlamına gelir; bu da verimsiz ve hataya açık olabilir. 10 | 11 | Bir diğeri ise hata kurtarmanın olmamasıdır. 12 | Bir repo bir şekilde bozulmuşsa veya kullanıcının hatalı biçimlendirilmiş bir yapılandırma değeri varsa; Git birçok işlemi gerçekleştirmeyi reddedecektir. 13 | 14 | Bir diğeri ise süreç yönetimidir. 15 | Git ayrı bir süreçte bir shell ortamını korumanızı ister, bu da bu karmaşayı gereksiz bir arttırabilir. 16 | Bu süreçlerin çoğunu koordine etmeye çalışmak (özellikle birden fazla süreçten aynı repoya erişme potansiyeli varsa) oldukça zor olabilir. 17 | -------------------------------------------------------------------------------- /book/B-embedding-git/sections/dulwich.asc: -------------------------------------------------------------------------------- 1 | === Dulwich 2 | 3 | (((Dulwich)))(((Python))) 4 | Ayrıca saf bir Python Git uygulaması da var: Dulwich. 5 | Proje https://www.dulwich.io/ adresinden yayınlanmaktadır. 6 | Git repolarına (hem yerel, hem de uzak) doğrudan Git'i çağırmayan, bunun yerine saf Python kullanan bir arayüz sağlamayı amaçlamaktadır. 7 | Performansı önemli ölçüde artıran, isteğe bağlı bir C uzantısı vardır. 8 | 9 | Dulwich Git tasarımını takip eder ve iki temel API düzeyini ayırır: tesisat (plumbing) ve döşeme (porcelain). 10 | 11 | Son katkının mesajına erişmek için alt düzey API'yi kullanmanın bir örneği: 12 | 13 | [source, python] 14 | ----- 15 | from dulwich.repo import Repo 16 | r = Repo('.') 17 | r.head() 18 | # '57fbe010446356833a6ad1600059d80b1e731e15' 19 | 20 | c = r[r.head()] 21 | c 22 | # 23 | 24 | c.message 25 | # 'Add note about encoding.\n' 26 | ----- 27 | 28 | Yüksek seviyeli döşeme API'si kullanarak bir katkı günlüğü yazdırmak için aşağıdakiler kullanılabilir: 29 | 30 | [source, python] 31 | ----- 32 | from dulwich import porcelain 33 | porcelain.log('.', max_entries=1) 34 | 35 | #commit: 57fbe010446356833a6ad1600059d80b1e731e15 36 | #Author: Jelmer Vernooij 37 | #Date: Sat Apr 29 2017 23:57:34 +0000 38 | ----- 39 | 40 | 41 | ==== İleri Okumalar 42 | 43 | * Resmi API kılavuzuna https://www.dulwich.io/apidocs/dulwich.html[] adresinden ulaşabilirsiniz. 44 | * https://www.dulwich.io/docs/tutorial[] adresindeki anlatılar Dulwich'le belli özel görevleri nasıl yapacağınıza dair pek çok örnek sunmaktadir. 45 | -------------------------------------------------------------------------------- /book/B-embedding-git/sections/go-git.asc: -------------------------------------------------------------------------------- 1 | === go-git 2 | 3 | (((go-git)))(((Go))) 4 | Git'i Golang'da yazılmış bir hizmete entegre etmek istiyorsanız, Pure Go kütüphanesi uygulamasını kullanabilirsiniz. 5 | Bu uygulamanın yerel bağımlılıkları yoktur ve bu nedenle manuel bellek yönetimi hatalarına eğilimli değildir. 6 | Ayrıca CPU, bellek profilleri, yarış dedektörü vb. Gibi standart Golang Performans Analizi takımları için şeffaftır. 7 | 8 | go-git, genişletilebilirlik, uyumluluk ve çoğu tesisat API'sini destekleme odaklıdır ve bunların kılavuzlarına https://github.com/src-d/go-git/blob/master/COMPATIBILITY.md[] adresinden ulaşabilirsiniz. 9 | 10 | İşte Go API'leri kullanımına temel bir örnek: 11 | 12 | [source, go] 13 | ----- 14 | import "gopkg.in/src-d/go-git.v4" 15 | 16 | r, err := git.PlainClone("/tmp/foo", false, &git.CloneOptions{ 17 | URL: "https://github.com/src-d/go-git", 18 | Progress: os.Stdout, 19 | }) 20 | ----- 21 | 22 | `Repository` reposunun bir örneğine ulaştığınnızda, bilgilere erişebilir ve üzerinde değişiklik yapabilirsiniz: 23 | 24 | [source, go] 25 | ----- 26 | // retrieves the branch pointed by HEAD 27 | ref, err := r.Head() 28 | 29 | // get the commit object, pointed by ref 30 | commit, err := r.CommitObject(ref.Hash()) 31 | 32 | // retrieves the commit history 33 | history, err := commit.History() 34 | 35 | // iterates over the commits and print each 36 | for _, c := range history { 37 | fmt.Println(c) 38 | } 39 | ----- 40 | 41 | 42 | ==== Gelişmiş İşlevsellik 43 | 44 | go-git'in dikkate değer bir kaç ileri seviye özelliği vardır; bunlardan birisi Libgit2 backend'lerine benzer olan taşınabilir bir depolama sistemine sahip olmasıdır. 45 | Varsayılan uygulama, çok hızlı olan bellek içi depolama alanıdır. 46 | 47 | [source, go] 48 | ----- 49 | r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{ 50 | URL: "https://github.com/src-d/go-git", 51 | }) 52 | ----- 53 | 54 | Plaggable depolama birçok ilginç seçenek sunar. 55 | Örneğin, https://github.com/src-d/go-git/tree/master/_examples/storage[] size referansları, nesneleri ve yapılandırmayı bir Aerospike veritabanında depolama olanağı sağlar. 56 | 57 | Başka bir özelliği esnek bir dosya sistemi soyutlamasına sahip olmasıdır. 58 | Https://godoc.org/github.com/src-d/go-billy#filesystem[] kullanarak tüm dosyaları farklı şekilde saklamak (örneğin hepsini diskte tek bir arşivde tutarak veya hepsini bellek içinde paketleyerek) kolaydır. 59 | 60 | Başka bir gelişmiş kullanımı ise https://github.com/src-d/go-git/blob/master/_examples/costom_http/main.go[] adresinde bulunan ince ayarlanabilir bir HTTP istemcisi içerir. 61 | 62 | [source, go] 63 | ----- 64 | customClient := &http.Client{ 65 | Transport: &http.Transport{ // accept any certificate (might be useful for testing) 66 | TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, 67 | }, 68 | Timeout: 15 * time.Second, // 15 second timeout 69 | CheckRedirect: func(req *http.Request, via []*http.Request) error { 70 | return http.ErrUseLastResponse // don't follow redirect 71 | }, 72 | } 73 | 74 | // Override http(s) default protocol to use our custom client 75 | client.InstallProtocol("https", githttp.NewClient(customClient)) 76 | 77 | // Clone repository using the new client if the protocol is https:// 78 | r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{URL: url}) 79 | ----- 80 | 81 | 82 | ==== İleri Okumalar 83 | 84 | go-git'in yeteneklerinin tamamına yer vermek bu kitabın kapsamı dışındadır. 85 | go-git hakkında daha fazla bilgi istiyorsanız, https://godoc.org/gopkg.in/src-d/go-git.v4[] adresindeki API kılavuzunu ve https://github.com/src-d/go-git/tree/master/_examples[] adresindeki bir dizi kullanım örneğini inceleyebilirsiniz. 86 | -------------------------------------------------------------------------------- /book/contributors.asc: -------------------------------------------------------------------------------- 1 | [preface] 2 | == Katkıda Bulunanlar 3 | 4 | Bu bir Açık Kaynak kitabı olduğundan, yıllar içinde birçok yazım hatası düzeltmesi ve içerik değişikliği aldık. 5 | Açık kaynaklı bir proje olarak Pro Git'in İngilizce versiyonuna katkıda bulunan tüm kişileri burada bulabilirsiniz. 6 | Bu kitabın herkes için daha iyi bir kitap olmasına yardımcı olan herkese teşekkür ederiz. 7 | 8 | [source,tabsize=8] 9 | ---- 10 | include::contributors.txt[] 11 | ---- 12 | 13 | -------------------------------------------------------------------------------- /book/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/book/cover.png -------------------------------------------------------------------------------- /book/dedication.asc: -------------------------------------------------------------------------------- 1 | [dedication] 2 | == İthaf 3 | 4 | _Karım Becky'ye, bu macera onsuz asla başlayamazdı. — Ben_ 5 | 6 | _Bu baskı hayatımdaki karıma ve kızıma adanmıştır. 7 | Bunca yıldır bana destek olan eşim Jessica'ya ve 8 | neler olup bittiğini bilemeyecek kadar yaşlandığımda 9 | bana destek olacak olan kızım Josephine'e. — Scott_ 10 | -------------------------------------------------------------------------------- /book/introduction.asc: -------------------------------------------------------------------------------- 1 | [preface] 2 | == Giriş 3 | 4 | Hayatınızın birkaç saatini Git hakkında okuyarak geçirmek üzeresiniz. 5 | Bir dakikanızı ayırıp sizin için neler hazırladığımızı açıklayalım. 6 | Burada bu kitabın on bölümünün ve üç ekinin kısa bir özetini bulacaksınız. 7 | 8 | *Bölüm 1*'de Sürüm Kontrol Sistemlerini (VCS'ler) ve Git'in temellerini ele alacağız: teknik konulara değinmeyeceğiz; sadece Git'in ne olduğu, VCS'lerle dolu bir ülkede neden ortaya çıktığı, onu diğerlerinden ayıran şeyin ne olduğunu ve neden pek çok kişinin onu kullandığı vs. 9 | Ardından Git'i nasıl indireceğinizi ve sisteminizde zaten yoksa ilk kez nasıl kuracağınızı açıklayacağız. 10 | 11 | *Bölüm 2*'de temel Git kullanımını ele alacağız; en sık karşılaşacağınız durumların %80'inde Git'in nasıl kullanılacağını. 12 | Bu bölümü okuduktan sonra bir repoyu klonlayabilmeniz, projenin geçmişinde neler olduğunu görebilmeniz, dosyaları değiştirebilmeniz ve değişikliklere katkıda bulunabilmeniz beklenmektedir. 13 | Eğer bu aşamadayken kitap kendiliğinden alev alırsa, siz henüz yeni bir kopya edinmeden, şimdiye kadar öğrendiğiniz şeyler zaten size çoktan fayda sağlamaya başlamış olmalı. 14 | 15 | *Bölüm 3* genellikle Git'in muhteşem özelliği olarak tanımlanan, Git'teki dallanma modeliyle ilgilidir. 16 | Burada Git'i diğerlerinden gerçekten ayıran şeyin ne olduğunu öğreneceksiniz. 17 | Bu bölüm bittiğinde, Git dallanması hayatınızın bir parçası olmadan önce nasıl yaşadığınızı düşünerek, sessizce bir dakika geçirme ihtiyacı hissedebilirsiniz. 18 | 19 | *Bölüm 4* sunucudaki Git'i kapsayacaktır. 20 | Bu bölüm, Git'i kuruluşunuzun içinde veya işbirliği için kendi kişisel sunucunuzda kurmak isteyenler içindir. 21 | Ayrıca, başka birinin bu işi sizin yerinize halletmesini tercih ederseniz, çeşitli barındırılan seçenekleri de keşfedeceğiz. 22 | 23 | *Bölüm 5* çeşitli dağıtık iş akışlarını ve bunların Git'te nasıl gerçekleştirileceğini tüm ayrıntılarıyla ele alacaktır. 24 | Bu bölümü tamamladığınızda, birden fazla uzak repoyla ustaca çalışabilmeli, Git'i e-posta üzerinden kullanabilmeli ve çok sayıda uzak dal ve katkıda bulunan yamalar arasında ustaca denge kurabilmelisiniz. 25 | 26 | *Bölüm 6* GitHub barındırma hizmetini ve araçlarını derinlemesine kapsar. 27 | Bir hesaba kaydolmayı ve bir hesabı yönetmeyi, Git repoları oluşturmayı ve kullanmayı, projelere katkıda bulunmak ve kendi projenize katkıları kabul etmek için ortak iş akışlarını, GitHub'ın programlanabilir arayüzünü ve genel olarak hayatınızı kolaylaştıracak birçok küçük ipucunu ele alıyoruz. 28 | 29 | *Bölüm 7* gelişmiş Git komutlarıyla ilgilidir. 30 | Burada korkutucu `reset` (sıfırla) komutunda ustalaşma, hataları tanımlamak için ikilik aramayı kullanma, geçmişi düzenleme, ayrıntılı revizyon seçimi ve çok daha fazlası gibi konuları öğreneceksiniz. 31 | Bu bölüm Git hakkındaki bilginizi tamamlayarak gerçek bir usta olmanızı sağlayacaktır. 32 | 33 | *Bölüm 8* özel Git ortamınızı yapılandırmayla ilgilidir. 34 | Bu, özelleştirilmiş politikaları uygulamak veya teşvik etmek için kanca komut dosyaları oluşturmayı ve istediğiniz şekilde çalışabilmeniz için ortam yapılandırma ayarlarını kullanmayı içerir. 35 | Ayrıca, özel bir katkı politikasını uygulamak için kendi komut dosyası setinizi oluşturmayı da ele alacağız. 36 | 37 | *Bölüm 9* Git ve diğer VCS'lerle ilgilidir. 38 | Buna Git'in Subversion (SVN) dünyasında kullanılması ve projelerin diğer VCS'lerden Git'e dönüştürülmesi de dahildir. 39 | Pek çok kuruluş hala SVN kullanıyor ve şimdilik değiştirmeyi planlamıyorlar, ancak bu noktada Git'in inanılmaz gücünü öğrenmiş olacaksınız; ve bu bölüm size hala bir SVN sunucusu kullanmak zorundaysanız nasıl başa çıkacağınızı gösteriyor. 40 | Ayrıca, herkesi bu işe girişmeye ikna etmeniz durumunda, projelerin birkaç farklı sistemden nasıl içe aktarılacağını da ele alıyoruz. 41 | 42 | *Bölüm 10* Git'in iç kısımlarının karanlık ama güzel derinliklerine iniyor. 43 | Artık Git hakkında her şeyi bildiğinize ve onu güç ve zarafetle kullanabildiğinize göre Git'in nesnelerini nasıl sakladığını tartışmaya geçebilirsiniz: nesne modelinin ne olduğu, paket dosyalarının ayrıntıları, sunucu protokolleri ve daha fazlası. 44 | Kitap boyunca, daha derinlemesine öğrenmek isteyecebileceğiniz bazı konularda, bu bölümün bazı kısımlarına referans vereceğiz; ama siz de bizim gibiyseniz ve teknik detaylara balıklamasına dalmak istiyorsanız, öncelikle Bölüm 10'u okumak isteyebilirsiniz. 45 | 46 | *Ek A*'da Git'i çeşitli spesifik ortamlarda kullanmanın birkaç örneğine bakıyoruz. 47 | Git'i kullanmak isteyebileceğiniz ve sizin için uygun olan çeşitli GUI'leri ve IDE programlama ortamlarını ele alıyoruz. 48 | Git'i kabuğunuzda (shell), IDE'nizde veya metin düzenleyicinizde kullanıma ilişkin bir genel bakış ilginizi çekiyorsa, buraya bir göz atın. 49 | 50 | *Ek B*'de Git'i libgit2 ve JGit gibi araçlarla kodlamayı ve genişletmeyi keşfediyoruz. 51 | Karmaşık ve hızlı özel araçlar yazmakla ilgileniyorsanız ve düşük düzeyli Git erişimine ihtiyacınız varsa, bu manzaranın nasıl göründüğüne buradan bakabilirsiniz. 52 | 53 | Son olarak *Ek C*'de tüm önemli Git komutlarını teker teker inceleyeceğiz ve bunları kitabın neresinde ele aldığımızı ve onlarla ne yaptığımızı gözden geçireceğiz. 54 | Belirli bir Git komutunu kitabın neresinde kullandığımızı öğrenmek istiyorsanız buraya bakabilirsiniz. 55 | 56 | Hadi başlayalım. 57 | -------------------------------------------------------------------------------- /book/license.asc: -------------------------------------------------------------------------------- 1 | [preface] 2 | == Licence 3 | 4 | include::../LICENSE.asc[] 5 | -------------------------------------------------------------------------------- /book/preface_ben.asc: -------------------------------------------------------------------------------- 1 | [preface] 2 | == Ben Straub'un önsözü 3 | 4 | Bu kitabın ilk baskısı Git'e bağlanmamı sağladı. 5 | Bu benim için daha önce gördüğüm her şeyden daha doğal hissettiren bir yazılım yapma tarzıyla tanışmamdı. 6 | O zamana birkaç yıllık bir geliştiriciydim; ancak bu, beni bulunduğum yoldan çok daha ilginç bir yola sokan, keskin bir dönüş oldu. 7 | 8 | Ve bundan yıllar sonra arkama bakınca görüyorum ki en büyük Git barındırma şirketinde çalıştım, insanlara Git'i öğreterek dünyayı dolaştım ve büyük bir Git uygulamasına katkıda bulunuyorum. 9 | Scott bana ikinci baskı üzerinde çalışmak isteyip istemediğimi sorduğunda, düşünmeme bile gerek kalmadı. 10 | 11 | Bu kitap üzerinde çalışmak büyük bir zevk ve ayrıcalıktı. 12 | Umarım bana olduğu kadar size de yardımcı olur. 13 | -------------------------------------------------------------------------------- /book/preface_scott.asc: -------------------------------------------------------------------------------- 1 | [preface] 2 | == Scott Chacon'un Önsözü 3 | 4 | Pro Git'in ikinci baskısına hoş geldiniz. 5 | İlk baskısı dört yıldan fazla bir süre önce yayınlandı. 6 | O zamandan beri çok şey değişti ama yine de pek çok önemli şey değişmedi. 7 | Git çekirdek ekibinin işleri geriye dönük olarak uyumlu tutma konusunda oldukça başarılı olması nedeniyle, temel komut ve kavramların çoğu bugün hala geçerli olsa da Git'i çevreleyen toplulukta bazı önemli eklemeler ve değişiklikler oldu. 8 | Bu kitabın ikinci baskısı, bu değişiklikleri ele almayı ve yeni kullanıcıya daha yararlı olabilmesi için kitabı güncellemeyi amaçlamaktadır. 9 | 10 | İlk baskıyı yazdığımda Git'in kullanımı hala nispeten zordu ve daha üst düzey hackerlar için zar zor benimsenen bir araçtı. 11 | Belirli topluluklarda güç kazanmaya başlıyordu, ancak bugün her yerde sahip olduğu yaygınlığın yanına bile yaklaşamamıştı. 12 | O zamandan beri neredeyse her açık kaynak topluluğu bunu benimsedi. 13 | Git Windows'ta, tüm platformlar için görsel kullanıcı arayüzlerinin patlamasında, IDE desteğinde ve iş kullanımında inanılmaz ilerleme kaydetti. 14 | Dört yıl önceki Pro Git bunların hiçbirinden haberdar değildi. 15 | Bu yeni baskının ana amaçlarından biri, Git topluluğundaki tüm bu yeni sınırlara değinmektir. 16 | 17 | Git'i kullanan Açık Kaynak topluluğu da patlama yaşadı. 18 | Yaklaşık beş yıl önce kitabı yazmaya başladığımda (ilk versiyonunu çıkarmak biraz zaman aldı), GitHub adında bir Git barındırma web sitesi geliştiren ve çok az bilinen bir şirkette çalışmaya yeni başlamıştım. 19 | Yayınlandığı sırada siteyi kullanan belki birkaç bin kişi vardı ve üzerinde sadece dördümüz çalışıyorduk. 20 | Ben bu girişi yazarken GitHub, yaklaşık 5 milyon kayıtlı geliştirici hesabı ve 230'dan fazla çalışanla 10 milyonuncu barındırılan projemizi duyuruyor. 21 | Sevin ya da nefret edin, GitHub Açık Kaynak topluluğunun büyük bir kısmını, ilk baskıyı yazmaya başladığımda hayal bile edilemeyecek şekilde ölçüde değiştirdi. 22 | 23 | Hiçbir zaman pek rahat olmadığım, barındırılan Git'in bir örneği olarak Pro Git'in orijinal sürümünde GitHub hakkında küçük bir bölüm yazdım. 24 | Aslında bir topluluk kaynağı olduğunu düşündüğüm şeyi yazıyor olmak ve aynı zamanda şirketim hakkında da konuşmak pek hoşuma gitmedi. 25 | Bu çıkar çatışmasını hâlâ sevmesem de GitHub'ın Git topluluğu içindeki önemi kaçınılmazdır. 26 | Git barındırma örneği yerine, kitabın bu bölümünü GitHub'ın ne olduğunu ve nasıl etkili bir şekilde kullanılacağını daha derinlemesine açıklamaya karar verdim. 27 | Git'i nasıl kullanacağınızı öğrenecekseniz GitHub'u nasıl kullanacağınızı bilmek, büyük bir topluluğa katılmanıza yardımcı olacaktır; bu, kendi kodunuz için hangi Git ana bilgisayarını kullanmaya karar verirseniz verin değerli bir bilgidir. 28 | 29 | Son yayından bu yana geçen diğer büyük değişiklik ise Git ağ işlemleri için HTTP protokolünün geliştirilmesi ve yükselişi oldu. 30 | Kitaptaki örneklerin çoğu, çok daha basit olduğu için SSH'den HTTP'ye değiştirildi. 31 | 32 | Git'in son birkaç yılda nispeten belirsiz bir sürüm kontrol sisteminden, bariz şekilde piyasaya hakim ve açık kaynaklı sürüm kontrolüne doğru büyümesini izlemek şaşırtıcıydı. 33 | Pro Git'in bu kadar başarılı olmasından ve piyasadaki hem oldukça başarılı hem de tamamen açık kaynak olan birkaç teknik kitaptan biri olabilmesinden mutluyum. 34 | 35 | Umarım Pro Git'in bu güncellenmiş sürümünü beğenirsiniz. 36 | -------------------------------------------------------------------------------- /ch01-introduction.asc: -------------------------------------------------------------------------------- 1 | [[ch01-introduction]] 2 | == Başlangıç 3 | 4 | Bu bölümde Git kullanımı hakkında temel bilgileri bulacaksınız. 5 | İşe, sürüm kontrol sistemleri hakkında açıklamalarla başlayacağız; daha sonra Git kurulumunun nasıl yapılacağını, en son olarak da aracın yapılandırma ve kullanımını açıklayacağız. 6 | Bu bölümün sonunda Git'in neden var olduğunu ve neden onu kullanmanız gerektiğini anlayacak, Git'i kullanmaya başlamak için kurulumu tamamlamış olacaksınız. 7 | 8 | include::book/01-introduction/sections/about-version-control.asc[] 9 | 10 | include::book/01-introduction/sections/history.asc[] 11 | 12 | include::book/01-introduction/sections/what-is-git.asc[] 13 | 14 | include::book/01-introduction/sections/command-line.asc[] 15 | 16 | include::book/01-introduction/sections/installing.asc[] 17 | 18 | include::book/01-introduction/sections/first-time-setup.asc[] 19 | 20 | include::book/01-introduction/sections/help.asc[] 21 | 22 | === Özet 23 | 24 | Artık Git'in ne olduğu ve önceden kullanmış olabileceğiniz MSKS'den hangi açılardan farklı olduğu konusunda temel bilgilere sahipsiniz. 25 | Ayrıca sisteminizde, sizin kimlik bilgilerinize göre ayarlanmış, çalışan bir Git kurulumu bulunuyor. 26 | Şimdi Git'in temellerini öğrenme zamanı. 27 | -------------------------------------------------------------------------------- /ch02-git-basics.asc: -------------------------------------------------------------------------------- 1 | [[ch02-git-basics]] 2 | == Git Temelleri 3 | 4 | Git'e başlamak için yalnızca bir bölüm okuyabilecek vaktiniz varsa, işte bu aradığınız bölümdür. 5 | Bu bölüm, Git'te zamanınızı harcayacağınız şeylerin büyük çoğunluğunu yapmak için ihtiyacınız olan tüm temel komutları kapsar. 6 | Bölümün sonunda, bir Git reposunu yapılandırıp başlatabilmeniz, dosyaları izlemeyi başlatıp durdurabilmeniz ve değişikliklerinizi izleme alıp (stage) uzak repoya kaydedebilecek seviyeye geleceksiniz. 7 | Ayrıca Git'i belirli dosyaları ve dosya kalıplarını yok sayacak şekilde nasıl ayarlayacağınızı, hataları hızlı ve kolay bir şekilde nasıl geri alacağınızı, projenizin geçmişine nasıl göz atacağınızı, katkılar (commit) arasındaki değişiklikleri nasıl görüntüleyeceğinizi ve uzak repolarla nasıl kod alışverişi yapacağınızı göstereceğiz. 8 | 9 | include::book/02-git-basics/sections/getting-a-repository.asc[] 10 | 11 | include::book/02-git-basics/sections/recording-changes.asc[] 12 | 13 | include::book/02-git-basics/sections/viewing-history.asc[] 14 | 15 | include::book/02-git-basics/sections/undoing.asc[] 16 | 17 | include::book/02-git-basics/sections/remotes.asc[] 18 | 19 | include::book/02-git-basics/sections/tagging.asc[] 20 | 21 | include::book/02-git-basics/sections/aliases.asc[] 22 | 23 | === Özet 24 | 25 | Bu noktada, tüm temel yerel Git işlemlerini yapabilirsiniz: bir repo oluşturma veya kopyalama, değişiklikler yapma, bu değişiklikleri izleme ve katkı olarak işleme, repodaki tüm geçmiş değişiklikleri görüntüleme, vs. 26 | Şimdi sıradaki konuya geçiyoruz: Git'in ana özelliği olan dallanma modeli. 27 | -------------------------------------------------------------------------------- /ch03-git-branching.asc: -------------------------------------------------------------------------------- 1 | [[ch03-git-branching]] 2 | == Git Dalları 3 | 4 | (((branches))) 5 | Neredeyse her sürüm kontrol sisteminin (VCS) bir tür dal desteği vardır. 6 | Dal oluşturmak, ana geliştirme hattından ayrılıp, bu ana hatla oynamadan çalışmalarımıza devam etmek anlamına gelir. 7 | Birçok sürüm kontrol sistemi aracında bu, genellikle kaynak kodu dizininin yeni bir kopyasını oluşturmanızı gerektiren ve büyük projeler için uzun zaman alabilen, maliyetli bir süreçtir. 8 | 9 | Bazı insanlar Git'in dalma modelini "ölümcül özellik" olarak adlandırır ve kuşkusuz Git'i VCS topluluğunda öne çıkarır. 10 | Peki bu neden bu kadar özeldir? 11 | Git'in dallanma şekli son derece hafiftir, bu da dallandırma işlemlerinin neredeyse anlık hale gelmesini sağlar ve genellikle dallar arasında hızlı bir şekilde geçiş yapılabilir. 12 | Diğer birçok sürüm kontrol sisteminin aksine, Git iş akışlarında sık sık dal açma ve birleştirmeyi teşvik eder, hatta gün içerisinde bir çok kez. 13 | Bu özelliği anlamak ve ustalaşmak size güçlü ve benzersiz bir araç sağlar ve geliştirme şeklinizi tamamen değiştirebilir. 14 | 15 | include::book/03-git-branching/sections/nutshell.asc[] 16 | 17 | include::book/03-git-branching/sections/basic-branching-and-merging.asc[] 18 | 19 | include::book/03-git-branching/sections/branch-management.asc[] 20 | 21 | include::book/03-git-branching/sections/workflows.asc[] 22 | 23 | include::book/03-git-branching/sections/remote-branches.asc[] 24 | 25 | include::book/03-git-branching/sections/rebasing.asc[] 26 | 27 | === Özet 28 | 29 | Git'te temel dal açma ve birleştirme işlemlerini ele aldık. 30 | Yeni dallar oluşturmayı, bu dallar arasında geçiş yapmayı ve yerel dalları birleştirmeyi artık rahatlıkla yapabiliyor olmalısınız. 31 | Ayrıca, dallarınızı paylaşmayı, paylaşımlı bir sunucuya itmeyi, başkalarınca paylaşılan dallarda çalışmayı ve dallarınızı paylaşmadan önce yeniden temellemeyi de öğrenmiş olmalısınz. 32 | Şimdi sıradaki konuya geçeceğiz: Kendi Git repo barındırma sunucunuzu (host) çalıştırmak için ihtiyacınız olan şeyler. 33 | 34 | -------------------------------------------------------------------------------- /ch04-git-server.asc: -------------------------------------------------------------------------------- 1 | [[ch04-git-on-the-server]] 2 | == Bir Sunucuda Git Kurma 3 | 4 | (((serving repositories))) 5 | Şu aşamada, Git'i kullanacağınız günlük görevlerin çoğunu yapabilecek durumda olmalısınız. 6 | Ancak, Git'te işbirliği yapmak için bir uzak Git reposuna ihtiyacınız olacaktır. 7 | Teknik olarak değişiklikleri bireylerin depolarına itip çekebilirsiniz, ancak dikkatli olmazsanız ne üzerinde çalıştıklarını kolayca karıştırabilirsiniz. 8 | Ayrıca, bilgisayarınız çevrimdışı olsa dahi çalışma arkadaşlarınızın repoya erişebilmesini istersiniz - daha güvenilir bir ortak repoya sahip olmak genellikle faydalıdır. 9 | Bu nedenle, biriyle işbirliği yapmanın en tercih edilen yolu, her ikinizin de erişimi olan ara bir repo kurmak ve bu repoya itip çekmektir. 10 | 11 | Bir Git sunucusu çalıştırmak oldukça basittir. 12 | İlk olarak, sunucunuzun hangi protokolleri destekleyeceğini seçersiniz. 13 | Bu bölümün ilk kısmı, mevcut protokolleri ve her birinin artılarını ve eksilerini ele alacaktır. 14 | Sonraki bölümler, bu protokolleri kullanarak tipik bazı kurulumları ve sunucunuzu bu protokollerle nasıl çalıştıracağınızı açıklayacaktır. 15 | Son olarak, kendi sunucunuzu kurup bakımını yapmakla uğraşmak istemiyorsanız ve kodunuzu başka birinin sunucusunda barındırmakla ilgili bir sorununuz yoksa, birkaç barındırma (hosting) seçeneğinden bahsedeceğiz. 16 | 17 | Kendi sunucunuzu çalıştırmakla ilgilenmiyorsanız, barındırılan bir hesap kurmak için bu ünitenin son bölümüne geçebilir ve ardından da bir sonraki üniteye geçebilirsiniz. O kısımda dağıtık bir kaynak kontrol ortamında çalışmanın çeşitli yönlerini tartışacağız. 18 | 19 | Bir uzak repo genellikle bir _yalın repo_ olarak adlandırılan ve çalışma dizini olmayan, basit bir Git reposudur. 20 | Bir repo sadece işbirliği noktası olarak kullanıldığından, sadece Git verileri vardır ve diske çıkarılmış bir poz oluşturma nedeni yoktur; . 21 | En basit ifadesiyle, yalın bir depo projenizin `.git` dizininden başka bir şey değildir. 22 | 23 | include::book/04-git-server/sections/protocols.asc[] 24 | 25 | include::book/04-git-server/sections/git-on-a-server.asc[] 26 | 27 | include::book/04-git-server/sections/generating-ssh-key.asc[] 28 | 29 | include::book/04-git-server/sections/setting-up-server.asc[] 30 | 31 | include::book/04-git-server/sections/git-daemon.asc[] 32 | 33 | include::book/04-git-server/sections/smart-http.asc[] 34 | 35 | include::book/04-git-server/sections/gitweb.asc[] 36 | 37 | include::book/04-git-server/sections/gitlab.asc[] 38 | 39 | include::book/04-git-server/sections/hosted.asc[] 40 | 41 | === Özet 42 | 43 | Başkalarıyla işbirliği yapmak veya çalışmalarınızı paylaşmak için uzaktan bir Git reposu oluşturmanın birkaç seçeneği bulunmaktadır. 44 | 45 | Kendi sunucunuzu çalıştırmak size çok fazla kontrol sağlar ve sunucuyu kendi güvenlik duvarınız içinde çalıştırmanıza izin verir, ancak bu tür bir sunucuyu kurmak ve bakımını yapmak genellikle çok fazla zaman gerektirir. 46 | Verilerinizi barındırılan bir sunucuya yerleştirmek ve bakımı yapmak daha kolaydır; ancak kodunuzu başka birinin sunucularında tutmak zorunda kalırsınız ve bazı kuruluşlar buna izin vermez. 47 | 48 | Hangi çözüm veya çözüm karmasının siz ve organizasyonunuz için uygun olduğunu belirlemek artık sizin için daha basit olmalı. 49 | -------------------------------------------------------------------------------- /ch05-distributed-git.asc: -------------------------------------------------------------------------------- 1 | [[ch05-distributed-git]] 2 | == Dağıtık Git 3 | 4 | (((distributed git))) 5 | Artık diğer geliştiricilerle ortak bir proje üzerinde çalışırken kodlarınızı paylaşmak üzere kurulmuş bir uzak Git deposuna sahipsiniz ve yerel bir iş akışında temel Git komutlarına aşina olduğunuz için, Git'in size sunduğu dağıtık iş akışlarını nasıl kullanacağınıza bakacaksınız. 6 | 7 | Bu bölümde, dağıtık bir ortamda bir katkı sağlayıcı ve proje yöneticisi olarak Git ile nasıl çalışılacağını göreceksiniz. 8 | Yani, bir projeye başarılı bir şekilde kod eklemeyi ve hem siz hem de proje yürütücüsü için sürecin mümkün olduğunca kolay olmasını sağlamayı öğreneceksiniz. Ayrıca birçok geliştiricinin katkıda bulunduğu bir projeyi başarılı bir şekilde sürdürmeyi de öğreneceksiniz. 9 | 10 | include::book/05-distributed-git/sections/distributed-workflows.asc[] 11 | 12 | include::book/05-distributed-git/sections/contributing.asc[] 13 | 14 | include::book/05-distributed-git/sections/maintaining.asc[] 15 | 16 | === Özet 17 | 18 | Artık Git'te bir projeye katkıda bulunma ve kendi projenizi veya diğer kullanıcıların katkılarını entegre etme konusunda oldukça rahat hissediyor olmalısınız. 19 | Artık etkili bir Git geliştiricisi olduğunuz için sizi kutlarız! 20 | Bir sonraki bölümde, en büyük ve en popüler Git barındırma hizmeti olan GitHub'ı nasıl kullanacağınızı öğreneceksiniz. 21 | -------------------------------------------------------------------------------- /ch06-github.asc: -------------------------------------------------------------------------------- 1 | [[ch06-github]] 2 | == GitHub 3 | 4 | (((GitHub))) 5 | GitHub, Git repoları için tek başına en büyük barındırıcıdır ve milyonlarca geliştirici ve projenin işbirliği için merkezi bir noktadır. 6 | Tüm Git repolarının çok büyük bir yüzdesi GitHub'de barındırılır ve birçok açık kaynaklı proje, barındırma, sorun takibi, kod incelemesi ve diğer işler için GitHub'i kullanır. 7 | Bu nedenle, GitHub, Git açık kaynak projesinin doğrudan bir parçası olmasa da, Git'i profesyonel olarak kullanırken GitHub ile etkileşime geçme ihtiyacı duyma ihtimaliniz oldukça yüksektir. 8 | 9 | Bu bölüm, GitHub'i etkili bir şekilde kullanma üzerinedir. 10 | Bir hesap oluşturmayı ve yönetmeyi, Git repoları oluşturmayı ve kullanmayı, projelere katkıda bulunma ve kendi projenize katkıları kabul etmek için yaygın iş akışlarını, GitHub'in programlamaya dayalı arayüzünü ve genel olarak hayatınızı kolaylaştıracak birçok başka küçük ipucunu kapsayacağız. 11 | 12 | Kendi projelerinizi GitHub üzerinden yayınlamak veya GitHub'ta barındırılan diğer projelerle işbirliği yapmak istemiyorsanız, doğrudan <> bölümüne geçebilirsiniz. 13 | 14 | [WARNING] 15 | .Arayüzdeki Değişimler 16 | ==== 17 | Bu ekran görüntülerindeki kullanıcı arayüzü öğelerinin birçoğunun zamanla değişebileceğini belirtmek istiyoruz. 18 | Umuyoruz ki burada neyi başarmaya çalıştığımızın genel fikri hala geçerli olacaktır, ancak daha güncel ekran görüntülerini istiyorsanız, bu kitabın çevrimiçi sürümlerinin daha yeni ekran görüntülerine sahip olabileceğini unutmayın. 19 | ==== 20 | 21 | include::book/06-github/sections/1-setting-up-account.asc[] 22 | 23 | include::book/06-github/sections/2-contributing.asc[] 24 | 25 | include::book/06-github/sections/3-maintaining.asc[] 26 | 27 | include::book/06-github/sections/4-managing-organization.asc[] 28 | 29 | include::book/06-github/sections/5-scripting.asc[] 30 | 31 | === Özet 32 | 33 | Artık bir GitHub kullanıcısısınız. 34 | Hesap oluşturmayı, bir organizasyon yönetmeyi, repo oluşturmayı ve yönlendirmeyi, başkalarının projelerine katkı sağlamayı ve başkalarından katkı kabul etmeyi biliyorsunuz. 35 | Bir sonraki bölümde, karmaşık durumlarla başa çıkmak için daha güçlü araçlar ve ipuçları öğreneceksiniz, bu da sizi gerçek bir Git bükücü yapacak. 36 | -------------------------------------------------------------------------------- /ch07-git-tools.asc: -------------------------------------------------------------------------------- 1 | [[ch07-git-tools]] 2 | == Git Araçları 3 | 4 | Şimdiye kadar, kaynak kod kontrolü için bir Git reposunu yönetmek veya sürdürmek için ihtiyacınız olan günlük komutları ve iş akışlarının çoğunu öğrendiniz. 5 | Dosyaları izleme ve katkılama gibi temel görevleri başardınız ve ayrıca konu dalları oluşturma ve birleştirme gücünü de kullandınız. 6 | 7 | Şimdi, günlük olarak kullanmasanız da, bir noktada ihtiyacınız olabilecek çok güçlü şeyleri keşfedeceksiniz. 8 | 9 | include::book/07-git-tools/sections/revision-selection.asc[] 10 | 11 | include::book/07-git-tools/sections/interactive-staging.asc[] 12 | 13 | include::book/07-git-tools/sections/stashing-cleaning.asc[] 14 | 15 | include::book/07-git-tools/sections/signing.asc[] 16 | 17 | include::book/07-git-tools/sections/searching.asc[] 18 | 19 | include::book/07-git-tools/sections/rewriting-history.asc[] 20 | 21 | include::book/07-git-tools/sections/reset.asc[] 22 | 23 | include::book/07-git-tools/sections/advanced-merging.asc[] 24 | 25 | include::book/07-git-tools/sections/rerere.asc[] 26 | 27 | include::book/07-git-tools/sections/debugging.asc[] 28 | 29 | include::book/07-git-tools/sections/submodules.asc[] 30 | 31 | include::book/07-git-tools/sections/bundling.asc[] 32 | 33 | include::book/07-git-tools/sections/replace.asc[] 34 | 35 | include::book/07-git-tools/sections/credentials.asc[] 36 | 37 | === Özet 38 | 39 | Günlük iş akışınızda, katkıları ve izlem alanını daha hassas bir şekilde kullanmanıza izin veren bir dizi gelişmiş araç gördünüz. 40 | Sorunları fark ettiğinizde, bu sorunları hangi katkının, ne zaman ve kim tarafından tanıtıldığını kolayca belirleyebilirsiniz. 41 | Projenizde alt-projeler kullanmak istiyorsanız, bu ihtiyaçları nasıl karşılayacağınızı da öğrendiniz. 42 | Bu noktada, çok rahat ve kendinden emin bir şekilde, Git'te günlük işlerinizin çoğunu komut satırında yapabilir durumda olmalısınız. 43 | -------------------------------------------------------------------------------- /ch08-customizing-git.asc: -------------------------------------------------------------------------------- 1 | [[ch08-customizing-git]] 2 | == Git'i Özelleştirmek 3 | 4 | Şimdiye kadar, Git'in nasıl çalıştığını ve nasıl kullanılacağını, ve kullanımınızı kolay ve verimli hale getirmek için Git'in sunduğu birçok aracı tanıttık. 5 | Bu bölümde, çeşitli önemli yapılandırma ayarlarını ve kancalar sistemini tanıtarak, Git'i daha özelleştirilmiş bir şekilde çalıştırmanın yollarını göreceğiz. 6 | Bu araçlarla, Git'i tam olarak sizin, şirketiniz veya grubunuzun ihtiyaç duyduğu şekilde çalıştırmak çok daha kolay olacaktır. 7 | 8 | include::book/08-customizing-git/sections/config.asc[] 9 | 10 | include::book/08-customizing-git/sections/attributes.asc[] 11 | 12 | include::book/08-customizing-git/sections/hooks.asc[] 13 | 14 | include::book/08-customizing-git/sections/policy.asc[] 15 | 16 | === Özet 17 | 18 | En önemli özelleştirme yollarını, iş akışınız ve projelerinizle en uyumlu çalışırken, Git istemcinizi ve sunucunuzu özelleştirebileceğiniz şekilde ele aldık. 19 | Çeşitli yapılandırma ayarları, dosya tabanlı nitelikler ve olay kancaları hakkında bilgi edindiniz ve örnek bir politika uygulama sunucusu oluşturdunuz. 20 | Artık Git'i neredeyse hayal edebileceğiniz her türlü iş akışına uyacak şekilde ayarlayabilirsiniz. 21 | -------------------------------------------------------------------------------- /ch09-git-and-other-scms.asc: -------------------------------------------------------------------------------- 1 | [[ch09-git-and-other-systems]] 2 | == Git ve Diğer Sistemler 3 | 4 | Dünya malesef mükemmel değil. 5 | Genellikle, dokunduğunuz her projeyi hemen Git'e geçiremezsiniz. 6 | Bazen başka bir VCS kullanan bir projede sıkışıp kalırsınız ve onun Git olmasını dilersiniz. 7 | Bu bölümün ilk kısmında, üzerinde çalıştığınız proje başka bir sistemde barındırıldığında, Git'i istemci olarak nasıl kullanabileceğiniz hakkında bilgi edineceksiniz. 8 | 9 | Bir noktada, mevcut projenizi Git'e dönüştürmek isteyebilirsiniz. 10 | Bu bölümün ikinci kısmı, projenizi birkaç belirli sistemden Git'e nasıl taşıyacağınızı kapsar. Ayrıca önceden yapılandırılmış bir içe aktarma aracı mevcut değilse kullanabileceğiniz bir yöntemi de içerir. 11 | 12 | === İstemci Olarak Git 13 | 14 | (((Git as a client))) 15 | Geliştiriciler için Git, o kadar güzel bir deneyim sunar ki, birçok insan ekibin geri kalanının tamamen farklı bir VCS kullandığı durumlarda bile onu kendi çalışma istasyonlarında nasıl kullanacaklarını bulmuştur. 16 | Bu bağdaştırıcılardan bazılarına "köprüler" denir ve sayıları pek çoktur. 17 | Burada vahşi doğada karşılaşmanız en olası olanları ele alacağız. 18 | 19 | include::book/09-git-and-other-scms/sections/client-svn.asc[] 20 | 21 | include::book/09-git-and-other-scms/sections/client-hg.asc[] 22 | 23 | include::book/09-git-and-other-scms/sections/client-bzr.asc[] 24 | 25 | include::book/09-git-and-other-scms/sections/client-p4.asc[] 26 | 27 | include::book/09-git-and-other-scms/sections/client-tfs.asc[] 28 | 29 | [[_migrating]] 30 | === Git'e Geçiş 31 | 32 | (((Migrating to Git))) 33 | Başka bir VCS'te mevcut bir kod tabanınız varsa ancak Git'i kullanmaya başlamaya karar verdiyseniz, projenizi bir şekilde taşımanız gerekir. 34 | Bu bölüm, yaygın sistemler için bazı içe aktarıcıları ele alır ve ardından kendi özel içe aktarıcınızı nasıl geliştireceğinizi gösterir. 35 | Profesyonel olarak kullanılan SCM sistemlerinin çoğunluğunu oluşturdukları ve yüksek kaliteli araçların bulunması kolay olduğu için, bu sistemlerden veri içe aktarma işlemini öğreneceksiniz. 36 | 37 | include::book/09-git-and-other-scms/sections/import-svn.asc[] 38 | 39 | include::book/09-git-and-other-scms/sections/import-hg.asc[] 40 | 41 | include::book/09-git-and-other-scms/sections/import-bzr.asc[] 42 | 43 | include::book/09-git-and-other-scms/sections/import-p4.asc[] 44 | 45 | include::book/09-git-and-other-scms/sections/import-tfs.asc[] 46 | 47 | include::book/09-git-and-other-scms/sections/import-custom.asc[] 48 | 49 | === Özet 50 | 51 | Git'i diğer sürüm kontrol sistemleri için bir istemci olarak kullanmak veya herhangi bir mevcut repoyu Git'e veri kaybı olmadan içe aktarmak konusunda (neredeyse her zaman) rahat hissedebilirsiniz. 52 | Bir sonraki bölümde, Git'in ham iç yönlerini ele alacağız, böylece gerektiğinde her bir baytı elde edebilirsiniz. 53 | -------------------------------------------------------------------------------- /ch10-git-internals.asc: -------------------------------------------------------------------------------- 1 | [[ch10-git-internals]] 2 | == Dahili Git Ögeleri 3 | 4 | Bu bölüme çok daha öndeki bir bölümden atlamış olabilir veya kitabın geri kalanını sırayla okuyarak bu noktaya gelmiş olabilirsiniz. Her iki durumda da, bu bölümde Git'in iç işleyişini ve uygulanmasını ele alacağız. 5 | Şunu keşfettik ki bu bilginin anlaşılması, Git'in ne kadar kullanışlı ve güçlü olduğunu kavramak için temel önem taşımaktadır, ancak diğerleri bize bu bilgilerin yeni başlayanlar için kafa karıştırıcı ve gereksiz ölçüde karmaşık olabileceğini savundular. Bu nedenle, bu tartışmayı kitaptaki son bölüm yaptık. 6 | Böylece bu bilgiyi öğrenme sürecinizin erken veya geç aşamalarında okuyabilirsiniz. 7 | Ne zaman okuyacağınıza dair kararı siz vereceksiniz. 8 | 9 | Şimdi burada olduğunuza göre, başlayabiliriz. 10 | İlk olarak, henüz net değilse, Git temel olarak bir içerik adreslenebilir dosya sistemidir ve üzerine yazılmış bir VCS kullanıcı arayüzüne sahiptir. 11 | Bunun ne anlama geldiğini birazdan daha detaylıca öğreneceksiniz. 12 | 13 | Git'in ilk zamanlarında (çoğunlukla v1.5 öncesi), kullanıcı arayüzü bu dosya sistemini vurguladığından; cilalanmış bir VCS yerine, daha karmaşık bir yapıdaydı. 14 | Kullanıcı arayüzü diğer sistemler kadar temiz ve kullanımı kolay hale gelene kadar, Son birkaç yılda, arayüz sürekli olarak geliştirildi. 15 | Ancak, kompleks ve öğrenmesi zor olan erken dönem Git kullanıcı arayüzüne dair bir sterotip hala varlığını sürdürmektedir. 16 | 17 | İçerik adreslenebilir dosya sistem katmanı inanılmaz derecede harika olduğu için, bu bölümde önce bunu ele alacağız; daha sonra, zamanla karşılaşabileceğiniz taşıma mekanizmalarını ve repo bakım görevlerini öğreneceksiniz. 18 | 19 | include::book/10-git-internals/sections/plumbing-porcelain.asc[] 20 | 21 | include::book/10-git-internals/sections/objects.asc[] 22 | 23 | include::book/10-git-internals/sections/refs.asc[] 24 | 25 | include::book/10-git-internals/sections/packfiles.asc[] 26 | 27 | include::book/10-git-internals/sections/refspec.asc[] 28 | 29 | include::book/10-git-internals/sections/transfer-protocols.asc[] 30 | 31 | include::book/10-git-internals/sections/maintenance.asc[] 32 | 33 | include::book/10-git-internals/sections/environment.asc[] 34 | 35 | === Özet 36 | 37 | Bu noktada Git'in arka planda ne yaptığını ve bir dereceye kadar nasıl uygulandığını oldukça iyi anlamalısınız. 38 | Bu bölümde, kitabın geri kalanında öğrendiğiniz porselen komutlarından daha düşük seviyeli ve daha basit olan bir takım tesisat komutları — komutları ele alınmıştır. 39 | Git'in daha düşük düzeyde nasıl çalıştığını anlamak, yaptığı şeyi neden yaptığını anlamanızı ve ayrıca özel iş akışınızın sizin için çalışmasını sağlamak için kendi araçlarınızı ve yardımcı komut dosyalarınızı yazmanızı kolaylaştıracaktır. 40 | 41 | İçerik adreslenebilir bir dosya sistemi olarak Git, bir VCS'den daha fazlası olarak kolayca kullanabileceğiniz çok güçlü bir araçtır. 42 | Bu teknolojiye ilişkin kendi harika uygulamanızı uygulamak için Git'in iç yapısıyla ilgili yeni keşfettiğiniz bilgileri kullanabileceğinizi ve Git'i daha gelişmiş şekillerde kullanırken daha rahat hissedebileceğinizi umuyoruz. 43 | 44 | -------------------------------------------------------------------------------- /diagram-source/progit.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/diagram-source/progit.sketch -------------------------------------------------------------------------------- /images/2fa-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/2fa-1.png -------------------------------------------------------------------------------- /images/account-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/account-settings.png -------------------------------------------------------------------------------- /images/advance-master.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/advance-master.png -------------------------------------------------------------------------------- /images/advance-testing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/advance-testing.png -------------------------------------------------------------------------------- /images/areas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/areas.png -------------------------------------------------------------------------------- /images/avatar-crop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/avatar-crop.png -------------------------------------------------------------------------------- /images/basic-branching-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/basic-branching-1.png -------------------------------------------------------------------------------- /images/basic-branching-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/basic-branching-2.png -------------------------------------------------------------------------------- /images/basic-branching-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/basic-branching-3.png -------------------------------------------------------------------------------- /images/basic-branching-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/basic-branching-4.png -------------------------------------------------------------------------------- /images/basic-branching-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/basic-branching-5.png -------------------------------------------------------------------------------- /images/basic-branching-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/basic-branching-6.png -------------------------------------------------------------------------------- /images/basic-merging-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/basic-merging-1.png -------------------------------------------------------------------------------- /images/basic-merging-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/basic-merging-2.png -------------------------------------------------------------------------------- /images/basic-rebase-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/basic-rebase-1.png -------------------------------------------------------------------------------- /images/basic-rebase-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/basic-rebase-2.png -------------------------------------------------------------------------------- /images/basic-rebase-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/basic-rebase-3.png -------------------------------------------------------------------------------- /images/basic-rebase-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/basic-rebase-4.png -------------------------------------------------------------------------------- /images/benevolent-dictator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/benevolent-dictator.png -------------------------------------------------------------------------------- /images/bitnami.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/bitnami.png -------------------------------------------------------------------------------- /images/blink-01-start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/blink-01-start.png -------------------------------------------------------------------------------- /images/blink-02-pr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/blink-02-pr.png -------------------------------------------------------------------------------- /images/blink-03-pull-request-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/blink-03-pull-request-open.png -------------------------------------------------------------------------------- /images/blink-04-email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/blink-04-email.png -------------------------------------------------------------------------------- /images/blink-04-pr-comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/blink-04-pr-comment.png -------------------------------------------------------------------------------- /images/blink-05-general-comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/blink-05-general-comment.png -------------------------------------------------------------------------------- /images/blink-06-final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/blink-06-final.png -------------------------------------------------------------------------------- /images/blink-pull-request-open copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/blink-pull-request-open copy.png -------------------------------------------------------------------------------- /images/blink-pull-request-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/blink-pull-request-open.png -------------------------------------------------------------------------------- /images/branch-and-history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/branch-and-history.png -------------------------------------------------------------------------------- /images/branch_widget_mac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/branch_widget_mac.png -------------------------------------------------------------------------------- /images/branch_widget_win.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/branch_widget_win.png -------------------------------------------------------------------------------- /images/centralized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/centralized.png -------------------------------------------------------------------------------- /images/centralized_workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/centralized_workflow.png -------------------------------------------------------------------------------- /images/checkout-master.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/checkout-master.png -------------------------------------------------------------------------------- /images/clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/clean.png -------------------------------------------------------------------------------- /images/collaborators.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/collaborators.png -------------------------------------------------------------------------------- /images/commit-and-tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/commit-and-tree.png -------------------------------------------------------------------------------- /images/commits-and-parents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/commits-and-parents.png -------------------------------------------------------------------------------- /images/data-model-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/data-model-1.png -------------------------------------------------------------------------------- /images/data-model-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/data-model-2.png -------------------------------------------------------------------------------- /images/data-model-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/data-model-3.png -------------------------------------------------------------------------------- /images/data-model-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/data-model-4.png -------------------------------------------------------------------------------- /images/deltas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/deltas.png -------------------------------------------------------------------------------- /images/distributed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/distributed.png -------------------------------------------------------------------------------- /images/double-dot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/double-dot.png -------------------------------------------------------------------------------- /images/egit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/egit.png -------------------------------------------------------------------------------- /images/email-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/email-settings.png -------------------------------------------------------------------------------- /images/forkbutton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/forkbutton.png -------------------------------------------------------------------------------- /images/git-bash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/git-bash.png -------------------------------------------------------------------------------- /images/git-diff-check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/git-diff-check.png -------------------------------------------------------------------------------- /images/git-fusion-boot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/git-fusion-boot.png -------------------------------------------------------------------------------- /images/git-fusion-perforce-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/git-fusion-perforce-graph.png -------------------------------------------------------------------------------- /images/git-gui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/git-gui.png -------------------------------------------------------------------------------- /images/git-instaweb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/git-instaweb.png -------------------------------------------------------------------------------- /images/git-osx-installer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/git-osx-installer.png -------------------------------------------------------------------------------- /images/git-tfs-ct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/git-tfs-ct.png -------------------------------------------------------------------------------- /images/github_mac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/github_mac.png -------------------------------------------------------------------------------- /images/github_win.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/github_win.png -------------------------------------------------------------------------------- /images/gitk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/gitk.png -------------------------------------------------------------------------------- /images/gitlab-broadcast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/gitlab-broadcast.png -------------------------------------------------------------------------------- /images/gitlab-groups.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/gitlab-groups.png -------------------------------------------------------------------------------- /images/gitlab-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/gitlab-menu.png -------------------------------------------------------------------------------- /images/gitlab-users.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/gitlab-users.png -------------------------------------------------------------------------------- /images/head-to-master.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/head-to-master.png -------------------------------------------------------------------------------- /images/head-to-testing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/head-to-testing.png -------------------------------------------------------------------------------- /images/hubot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/hubot.png -------------------------------------------------------------------------------- /images/integration-manager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/integration-manager.png -------------------------------------------------------------------------------- /images/interesting-rebase-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/interesting-rebase-1.png -------------------------------------------------------------------------------- /images/interesting-rebase-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/interesting-rebase-2.png -------------------------------------------------------------------------------- /images/interesting-rebase-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/interesting-rebase-3.png -------------------------------------------------------------------------------- /images/interesting-rebase-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/interesting-rebase-4.png -------------------------------------------------------------------------------- /images/interesting-rebase-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/interesting-rebase-5.png -------------------------------------------------------------------------------- /images/large-merges-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/large-merges-1.png -------------------------------------------------------------------------------- /images/large-merges-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/large-merges-2.png -------------------------------------------------------------------------------- /images/lifecycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/lifecycle.png -------------------------------------------------------------------------------- /images/local.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/local.png -------------------------------------------------------------------------------- /images/lr-branches-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/lr-branches-1.png -------------------------------------------------------------------------------- /images/lr-branches-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/lr-branches-2.png -------------------------------------------------------------------------------- /images/maint-01-email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/maint-01-email.png -------------------------------------------------------------------------------- /images/maint-02-merge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/maint-02-merge.png -------------------------------------------------------------------------------- /images/maint-03-email-resp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/maint-03-email-resp.png -------------------------------------------------------------------------------- /images/maint-04-target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/maint-04-target.png -------------------------------------------------------------------------------- /images/maint-05-mentions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/maint-05-mentions.png -------------------------------------------------------------------------------- /images/maint-06-unsubscribe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/maint-06-unsubscribe.png -------------------------------------------------------------------------------- /images/maint-07-notifications.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/maint-07-notifications.png -------------------------------------------------------------------------------- /images/maint-08-notifications-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/maint-08-notifications-page.png -------------------------------------------------------------------------------- /images/maint-09-contrib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/maint-09-contrib.png -------------------------------------------------------------------------------- /images/maint-10-default-branch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/maint-10-default-branch.png -------------------------------------------------------------------------------- /images/maint-11-transfer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/maint-11-transfer.png -------------------------------------------------------------------------------- /images/managed-team-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/managed-team-1.png -------------------------------------------------------------------------------- /images/managed-team-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/managed-team-2.png -------------------------------------------------------------------------------- /images/managed-team-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/managed-team-3.png -------------------------------------------------------------------------------- /images/managed-team-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/managed-team-flow.png -------------------------------------------------------------------------------- /images/markdown-01-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/markdown-01-example.png -------------------------------------------------------------------------------- /images/markdown-02-tasks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/markdown-02-tasks.png -------------------------------------------------------------------------------- /images/markdown-03-task-summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/markdown-03-task-summary.png -------------------------------------------------------------------------------- /images/markdown-04-fenced-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/markdown-04-fenced-code.png -------------------------------------------------------------------------------- /images/markdown-05-quote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/markdown-05-quote.png -------------------------------------------------------------------------------- /images/markdown-06-emoji-complete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/markdown-06-emoji-complete.png -------------------------------------------------------------------------------- /images/markdown-07-emoji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/markdown-07-emoji.png -------------------------------------------------------------------------------- /images/markdown-08-drag-drop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/markdown-08-drag-drop.png -------------------------------------------------------------------------------- /images/mentions-01-syntax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/mentions-01-syntax.png -------------------------------------------------------------------------------- /images/mentions-02-render.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/mentions-02-render.png -------------------------------------------------------------------------------- /images/mentions-03-closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/mentions-03-closed.png -------------------------------------------------------------------------------- /images/merging-workflows-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/merging-workflows-1.png -------------------------------------------------------------------------------- /images/merging-workflows-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/merging-workflows-2.png -------------------------------------------------------------------------------- /images/merging-workflows-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/merging-workflows-3.png -------------------------------------------------------------------------------- /images/merging-workflows-4 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/merging-workflows-4 2.png -------------------------------------------------------------------------------- /images/merging-workflows-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/merging-workflows-4.png -------------------------------------------------------------------------------- /images/merging-workflows-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/merging-workflows-5.png -------------------------------------------------------------------------------- /images/new-repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/new-repo.png -------------------------------------------------------------------------------- /images/neworg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/neworg.png -------------------------------------------------------------------------------- /images/newrepo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/newrepo.png -------------------------------------------------------------------------------- /images/newrepoform.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/newrepoform.png -------------------------------------------------------------------------------- /images/orgs-01-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/orgs-01-page.png -------------------------------------------------------------------------------- /images/orgs-02-teams.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/orgs-02-teams.png -------------------------------------------------------------------------------- /images/orgs-03-audit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/orgs-03-audit.png -------------------------------------------------------------------------------- /images/p4merge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/p4merge.png -------------------------------------------------------------------------------- /images/perils-of-rebasing-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/perils-of-rebasing-1.png -------------------------------------------------------------------------------- /images/perils-of-rebasing-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/perils-of-rebasing-2.png -------------------------------------------------------------------------------- /images/perils-of-rebasing-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/perils-of-rebasing-3.png -------------------------------------------------------------------------------- /images/perils-of-rebasing-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/perils-of-rebasing-4.png -------------------------------------------------------------------------------- /images/perils-of-rebasing-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/perils-of-rebasing-5.png -------------------------------------------------------------------------------- /images/posh-git.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/posh-git.png -------------------------------------------------------------------------------- /images/pr-01-fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/pr-01-fail.png -------------------------------------------------------------------------------- /images/pr-02-merge-fix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/pr-02-merge-fix.png -------------------------------------------------------------------------------- /images/public-small-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/public-small-1.png -------------------------------------------------------------------------------- /images/public-small-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/public-small-2.png -------------------------------------------------------------------------------- /images/public-small-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/public-small-3.png -------------------------------------------------------------------------------- /images/rebasing-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/rebasing-1.png -------------------------------------------------------------------------------- /images/rebasing-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/rebasing-2.png -------------------------------------------------------------------------------- /images/remote-branches-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/remote-branches-1.png -------------------------------------------------------------------------------- /images/remote-branches-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/remote-branches-2.png -------------------------------------------------------------------------------- /images/remote-branches-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/remote-branches-3.png -------------------------------------------------------------------------------- /images/remote-branches-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/remote-branches-4.png -------------------------------------------------------------------------------- /images/remote-branches-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/remote-branches-5.png -------------------------------------------------------------------------------- /images/replace1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/replace1.png -------------------------------------------------------------------------------- /images/replace2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/replace2.png -------------------------------------------------------------------------------- /images/replace3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/replace3.png -------------------------------------------------------------------------------- /images/replace4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/replace4.png -------------------------------------------------------------------------------- /images/replace5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/replace5.png -------------------------------------------------------------------------------- /images/reposettingslink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reposettingslink.png -------------------------------------------------------------------------------- /images/rerere1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/rerere1.png -------------------------------------------------------------------------------- /images/rerere2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/rerere2.png -------------------------------------------------------------------------------- /images/rerere3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/rerere3.png -------------------------------------------------------------------------------- /images/reset-checkout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-checkout.png -------------------------------------------------------------------------------- /images/reset-ex1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-ex1.png -------------------------------------------------------------------------------- /images/reset-ex2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-ex2.png -------------------------------------------------------------------------------- /images/reset-ex3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-ex3.png -------------------------------------------------------------------------------- /images/reset-ex4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-ex4.png -------------------------------------------------------------------------------- /images/reset-ex5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-ex5.png -------------------------------------------------------------------------------- /images/reset-ex6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-ex6.png -------------------------------------------------------------------------------- /images/reset-hard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-hard.png -------------------------------------------------------------------------------- /images/reset-mixed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-mixed.png -------------------------------------------------------------------------------- /images/reset-path1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-path1.png -------------------------------------------------------------------------------- /images/reset-path2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-path2.png -------------------------------------------------------------------------------- /images/reset-path3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-path3.png -------------------------------------------------------------------------------- /images/reset-soft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-soft.png -------------------------------------------------------------------------------- /images/reset-squash-r1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-squash-r1.png -------------------------------------------------------------------------------- /images/reset-squash-r2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-squash-r2.png -------------------------------------------------------------------------------- /images/reset-squash-r3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-squash-r3.png -------------------------------------------------------------------------------- /images/reset-start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-start.png -------------------------------------------------------------------------------- /images/reset-workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/reset-workflow.png -------------------------------------------------------------------------------- /images/scripting-01-services.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/scripting-01-services.png -------------------------------------------------------------------------------- /images/scripting-02-email-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/scripting-02-email-service.png -------------------------------------------------------------------------------- /images/scripting-03-webhook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/scripting-03-webhook.png -------------------------------------------------------------------------------- /images/scripting-04-webhook-debug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/scripting-04-webhook-debug.png -------------------------------------------------------------------------------- /images/scripting-05-access-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/scripting-05-access-token.png -------------------------------------------------------------------------------- /images/scripting-06-comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/scripting-06-comment.png -------------------------------------------------------------------------------- /images/scripting-07-status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/scripting-07-status.png -------------------------------------------------------------------------------- /images/signup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/signup.png -------------------------------------------------------------------------------- /images/small-team-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/small-team-1.png -------------------------------------------------------------------------------- /images/small-team-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/small-team-2.png -------------------------------------------------------------------------------- /images/small-team-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/small-team-3.png -------------------------------------------------------------------------------- /images/small-team-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/small-team-4.png -------------------------------------------------------------------------------- /images/small-team-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/small-team-5.png -------------------------------------------------------------------------------- /images/small-team-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/small-team-6.png -------------------------------------------------------------------------------- /images/small-team-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/small-team-7.png -------------------------------------------------------------------------------- /images/small-team-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/small-team-flow.png -------------------------------------------------------------------------------- /images/smudge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/smudge.png -------------------------------------------------------------------------------- /images/snapshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/snapshots.png -------------------------------------------------------------------------------- /images/ssh-keys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/ssh-keys.png -------------------------------------------------------------------------------- /images/topic-branches-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/topic-branches-1.png -------------------------------------------------------------------------------- /images/topic-branches-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/topic-branches-2.png -------------------------------------------------------------------------------- /images/two-branches.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/two-branches.png -------------------------------------------------------------------------------- /images/undomerge-reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/undomerge-reset.png -------------------------------------------------------------------------------- /images/undomerge-revert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/undomerge-revert.png -------------------------------------------------------------------------------- /images/undomerge-revert2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/undomerge-revert2.png -------------------------------------------------------------------------------- /images/undomerge-revert3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/undomerge-revert3.png -------------------------------------------------------------------------------- /images/undomerge-start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/undomerge-start.png -------------------------------------------------------------------------------- /images/vs-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/vs-1.png -------------------------------------------------------------------------------- /images/vs-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/vs-2.png -------------------------------------------------------------------------------- /images/your-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/your-profile.png -------------------------------------------------------------------------------- /images/zsh-oh-my.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/zsh-oh-my.png -------------------------------------------------------------------------------- /images/zsh-prompt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progit/progit2-tr/b7c3c05b2ba37a03ee7aef68d760773e0373c7ec/images/zsh-prompt.png -------------------------------------------------------------------------------- /index.asc: -------------------------------------------------------------------------------- 1 | [#index] 2 | [index] 3 | = Index 4 | -------------------------------------------------------------------------------- /progit.asc: -------------------------------------------------------------------------------- 1 | Pro Git 2 | ======= 3 | Scott Chacon, Ben Straub 4 | $$VERSION$$, $$DATE$$ 5 | :doctype: book 6 | :docinfo: 7 | :toc: 8 | :toclevels: 2 9 | :pagenums: 10 | :front-cover-image: image:book/cover.png[width=1050,height=1600] 11 | :lang: ko 12 | 13 | ifdef::ebook-format[:leveloffset: -1] 14 | 15 | include::book/license.asc[] 16 | 17 | include::book/preface_scott.asc[] 18 | 19 | include::book/preface_ben.asc[] 20 | 21 | include::book/dedication.asc[] 22 | 23 | //include::book/contributors.asc[] 24 | 25 | include::book/introduction.asc[] 26 | 27 | include::ch01-introduction.asc[] 28 | 29 | include::ch02-git-basics.asc[] 30 | 31 | include::ch03-git-branching.asc[] 32 | 33 | include::ch04-git-server.asc[] 34 | 35 | include::ch05-distributed-git.asc[] 36 | 37 | include::ch06-github.asc[] 38 | 39 | include::ch07-git-tools.asc[] 40 | 41 | include::ch08-customizing-git.asc[] 42 | 43 | include::ch09-git-and-other-scms.asc[] 44 | 45 | include::ch10-git-internals.asc[] 46 | 47 | include::A-git-in-other-environments.asc[] 48 | 49 | include::B-embedding-git.asc[] 50 | 51 | include::C-git-commands.asc[] 52 | 53 | ifndef::ebook-format[include::index.asc[]] 54 | --------------------------------------------------------------------------------