Git'te şube topolojisini görselleştirme


883

Git ile kendi makinemde tek başına oynuyorum ve tüm şubelerimin ve taahhütlerimin zihinsel bir modelini korumakta zorlanıyorum. git logİşlem geçmişini bulunduğum yerden görmek için yapabileceğimi biliyorum , ancak tüm şube topografisini görmenin bir yolu var, bu ASCII haritaları gibi şubeleri açıklamak için her yerde kullanılıyor gibi görünüyor?

      .-A---M---N---O---P
     /     /   /   /   /
    I     B   C   D   E
     \   /   /   /   /
      `-------------'

Sanki birisi geliyor ve depomu almaya çalışırken, tam olarak neler olup bittiğini anlamakta zorluk çekiyor.

AccuRev'in akış tarayıcısından etkilendim sanırım ...



1
@ leif81, yarı kopya, benim için. @Masi sorusuna gitk'i açıkça dışladı.
Benjol

Yanıtlar:


1082

git log --graphVeya tuşunu kullanın gitk. (Her ikisi de --allsadece geçerli olan yerine tüm dalları gösterecek şekilde kabul eder .)

Şube adları ve kompakt görünüm için şunları deneyin:

git log --graph --decorate --oneline

47
Bu, taahhütleri şubelerle bile etiketlemez. Buna olduğu gibi iyi bir görselleştirme demezdim.
Roman Starkov

7
Teşekkürler! gitg de --allseçeneği vardır ve ayrıca taahhütleri etiketler. Ayrıca, açılır menüde oradaki tüm şubeleri seçebileceğinizi hiç görmedim.
Thomas

210
Ben tavsiye ederim git log --graph --decorate --oneline- satır başına bir taahhüt gösterir ve şube isimleri ile süsleyin.
sleske

8
tig (bir ncurse git istemcisi) --allseçeneği de sunar . Oldukça kullanışlı!
Pierre-Adrien Buisson

5
Ayrıca bkz Andrew cevap ilişkin --simplify-by-decorationseçeneği.
ruvim

483

Genellikle kullanırım

git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"

Renklerle (kabuğunuz Bash ise):

git log --graph --full-history --all --color \
        --pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"

Bu, aşağıdaki gibi metin tabanlı gösterim yazdırır:

* 040cc7c       (HEAD, master) Manual is NOT built by default
* a29ceb7       Removed offensive binary file that was compiled on my machine and was hence incompatible with other machines.
| * 901c7dd     (cvc3) cvc3 now configured before building
| * d9e8b5e     More sane Yices SMT solver caller
| | * 5b98a10   (nullvars) All uninitialized variables get zero inits
| |/
| * 1cad874     CFLAGS for cvc3 to work successfully
| *   1579581   Merge branch 'llvm-inv' into cvc3
| |\
| | * a9a246b   nostaticalias option
| | * 73b91cc   Comment about aliases.
| | * 001b20a   Prints number of iteration and node.
| |/
|/|
| * 39d2638     Included header files to cvc3 sources
| * 266023b     Added cvc3 to blast infrastructure.
| * ac9eb10     Initial sources of cvc3-1.5
|/
* d642f88       Option -aliasstat, by default stats are suppressed

(Sadece kullanabilirsiniz git log --format=oneline, ancak taahhüt mesajlarını daha az IMHO gibi görünen sayılara bağlayacaktır).

Bu komut için bir kısayol yapmak üzere ~/.gitconfigdosyanızı düzenlemek isteyebilirsiniz :

[alias]
  gr = log --graph --full-history --all --color --pretty=tformat:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s%x20%x1b[33m(%an)%x1b[0m"

Bununla birlikte, yorumlarda Sodel Vurgulu notlar gibi, bu uzun biçimlendirme komutunu ezberlemek zordur. Genellikle, ~/.gitconfigdosyaya koyabileceğiniz için bu bir sorun değildir . Ancak, bazen yapılandırma dosyasını değiştiremediğiniz bir uzak makinede oturum açmanız gerekiyorsa, yazmak için daha basit ama daha hızlı bir sürüm kullanabilirsiniz:

git log --graph --oneline

10
Tarihleri ​​beğendiyseniz: git log --graph --full-history --all --color --date = short --pretty = format: "% x1b [31m% s% x09% x1b [32m% d% x1b [ 0m% x20% ad% s "
sehugg

7
--oneline, bu güzel biçimlendirici derin büyü için daha unutulmaz bir alternatiftir.
Daniel Ralston

1
@SodeltheVociferous, soruna bahsettiğiniz taraftan yaklaşmadım; Cevabımı genişlettim.
P,

2
Not: --full-historyyalnızca --simplify-by-decorationbir dosya yolu kullanılırken veya belirtilirken geçerlidir.
Slipp D.Thompson

2
Biçim dizesini nereden aldığınızı sorabilir miyim? Ya da bu şeyi nasıl uydurdun?
elliotwesoff

444

Normalde dosyama attığım 3 takma ad (ve hızlı kullanım için 4 takma ad) var ~/.gitconfig:

[alias]
    lg = lg1
    lg1 = lg1-specific --all
    lg2 = lg2-specific --all
    lg3 = lg3-specific --all

    lg1-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)'
    lg2-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(auto)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'
    lg3-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset) %C(bold cyan)(committed: %cD)%C(reset) %C(auto)%d%C(reset)%n''          %C(white)%s%C(reset)%n''          %C(dim white)- %an <%ae> %C(reset) %C(dim white)(committer: %cn <%ce>)%C(reset)'

git lg/ git lg1şuna benzer:

git lg1

git lg2 buna benzer:

git lg2

ve git lg3şuna benzer:

git lg3

Bunun hepsinin sonu için bir çözüm anlamına gelmediğine dikkat edilmelidir - beğeninize göre değiştirmek, eklemek ve düzeltmek için bir şablon. Bunları kullanmak istiyorsanız, tavsiyem:

  1. Onları .gitconfig ,
  2. Beğeninize göre özelleştirin (farklı renk seçenekleri, 2 ve 3 satırlı versiyonlar için farklı çizgi düzenlemeleri, vb.),
  3. Ve sonra bir kopyasını bir Gist veya başka bir kod snippet aracına kaydedin, böylece .gitconfiggelecekte kopyalayıp yapıştırabilirsiniz (veya alternatif olarak dotfiles'ınızı sürüm kontrol edebilirsiniz) .

Not: Yanıt, burada olduğundan çok daha uygun olduğu için stackoverflow.com/questions/1057564/pretty-git-branch-graphs adresindeki yanıttan kopyalandı ve geliştirildi . Diğer nedenlerin kopyasını tarihsel nedenlerle bıraktı - şimdi kapandı ve cevaplar bir sürü başka cevap tarafından referans verildi.


10
Öneri: değiştirmek %C(bold yellow)ile %C(auto)için farklı renkler sahibi olmak için HEAD, yerel ve uzak dalları ( ref ).
Atcold

2
%w(); Kullanarak biçim dizenize el ile girinti eklemekten kaçınabileceğinizi unutmayın ; bu şekilde, grafiği bozmadan daha uzun veya çok satırlı taahhüt mesajlarını düzgün bir şekilde sarabilirsiniz.
charliegreen

1
@ mbadawi23 Platform ve Git kurulumlarında tutarlılık uğruna gereksizdirler. --abbrev-commit2nci satırlar boşluklarla elle girintili olduğu için ve kısa SHA'yı kullanacağından kesinlikle emin olmak istedim - üzgünümden çok daha güvenli. --decorateorada da çünkü Git'in varsayılanları aynı şeyi yapsa da, farklı Git sürümlerinde farklı veya farklı yapılandırılabilir - bunlar için kesinlikle dekorasyon istiyorum. Nihayetinde, fazla / fazla bayraklar burada fena değil - bu bir dosyaya giriyor; her zaman yazdığınız bir şey değil.
Slipp D.Thompson

1
@TimothyPulliam Her dalın / etiketin ucunu temsil eden her satırın sonunda, ilişkili dal / etiket adlarını parantez içinde görürsünüz - örneğin lg1& lg2ekran görüntülerinde (origin/test_on_10.8)uzak dalın gösterildiğini görebilirsiniz ve lg2ekran görüntüsünde bkz . şubenin (HEAD -> master, origin/master, origin/HEAD)hem yerel hem de uzak konumlarını gösteren . Bu, Git için popüler olan dal görselleştirme GUI araçlarının (gitk, SourceTree, TortoiseGit, Tower, Fork, GitX), biraz daha fazla ayrıntıyla (bazı GUI araçları renk kodlaması kullanır ) eşleşir . masterHEAD
Slipp D. Thompson

2
@TimothyPulliam Hangi taahhütlerin “her dalın bir parçası” olduğunu anlamak için renkli çizgiyi görsel olarak izlemelisiniz. Neredeyse her araç size bu konuda pek yardımcı olmaz çünkü Git taahhütleri kendiliğinden herhangi bir dala ait değildir - ana-atalarında bulunan herhangi bir dala veya etikete ait oldukları ima edilir (grafik-görselleştirme-zamanda) . Bir taahhüdüne atıfta bulunan ve yok olan bir şube / etiket yoksa (ancak yaklaşık 2 hafta boyunca çöp toplanmazsa); daha önce referanslandırılmamış bir taahhüdü referans alan bir şube / etiket eklediğinizde yeniden görünür. Umarım bunların hepsi mantıklıdır.
Slipp D. Thompson

236

Bu tariflerden herhangi birine (git günlüğüne veya gitk'e dayalı olarak) ekleyebilirsiniz. --simplify-by-decoration tarihin ilginç olmayan doğrusal bölümlerini daraltmak için . Bu, topolojinin çok daha fazlasını aynı anda görünür hale getirir. Artık bu seçenek olmadan anlaşılamayacak büyük tarihleri ​​anlayabiliyorum!

Bunu gönderme gereğini hissettim, çünkü olması gerektiği kadar iyi görünmüyor. Tarihi görselleştirme ile ilgili Stack Overflow sorularının çoğunda görünmüyor ve bulmak için biraz arama yapmamı istedi - hatta istediğimi bildiğimden sonra bile! Sonunda bu Debian hata raporunda buldum . Stack Overflow'daki ilk söz, Antoine Pelisse'in bu cevabı gibi görünüyor .


3
Mükemmel - tam olarak aradığım şey! Daha fazla oy almalı; neredeyse herkes gitk / gitg / git log --graph'ı zaten biliyor, ancak şube topolojisini görselleştirmek ve tek taahhütleri önemsememek istiyorsanız bunlar hiç de kullanışlı değil.
14'te imolit

4
Bu tam olarak ihtiyacım olan şey, fantastik. Tüm cevaplardan bana yardımcı olan tek şey bu. --simplify-by-decorationneler olduğunu çok netleştirir.
Ela782

9
Bu gerçekten cevap olmalı. git log --graph --all --simplify-by-decorationçalışır.
Irfy

--simplify-by-decorationKeşfedilen her taahhütten önce / sonra (gibi -Bve -Aiçin grep) n komisyon eklerken kullanabilseydik .
Junvar

Bu çözümü o kadar sık ​​kullanıyorum ki 'git tree' diye takma adı var.
user16973

76

Gitk bazen okumam acı verici.

resim açıklamasını buraya girin

GitVersionTree yazmam için beni motive et .

resim açıklamasını buraya girin


3
@exhuma Mono'yu desteklemek için yazarla bir PR'ım var (Mono 2.10'a karşı Ubuntu 13.10'da test edildi)
Max Ehrlich

1
GitVersionTree'nin şubeleri zamanla aynı yerde tuttuğunu gördüm, bu da şeylerin nasıl değiştiğini görmeyi kolaylaştırıyor.
sfranky

48

Zamanımın% 99,999'u tarihe göre bakıyor git lgve% 0,001'i git log.

Ben sadece yararlı olabilir iki günlük diğer adlarını paylaşmak istiyorum (.gitconfig yapılandırmak):

[Alias]
     lg = log --graph --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
     hist = log --graph --full-history --all --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
  • git lg geçerli şube geçmişini görecektir.
  • git hist tüm şube geçmişini görecek.

44

Topolojiyi açık bir şekilde gösteren çapraz platform GUI'si olan Gitkraken'e bir göz atın .

Topoloji

İşte bazı gelişmiş özellikler hakkında hızlı bir video eğitimi .


6
Bu iş parçacığının GitKraken'i nasıl var, ancak eski ve ücretsiz SourceTree'ye sahip değil mi? (Biliyorum, biliyorum, Atlassian her zaman her şeyi doğru yapmaz. Ama SourceTree görselleştirmek için oldukça harika bir araçtır.)
XML

43

Yapmayı severim git log:

 git log --graph --oneline --branches

(ayrıca uzak dalları görüntülemek için --all ile birlikte)

Son Git sürümleriyle İşleri: tanıtılan beri 1.6.3 ( Thu, 7 Mayıs 2009 )

  • " --pretty=<style>" Günlük komut ailesi seçeneğine artık " --format=<style>" yazılabilir .
    Ayrıca, --format=%formatstringkısa elidir --pretty=tformat:%formatstring.

  • " --oneline", " " ile eşanlamlıdır --pretty=oneline --abbrev-commit.

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix
| | * 8183707 a first bug10 fix
| |/
| * e727105 a second evol for 2.0
| * 473d44e a main evol
|/
* b68c1f5 first evol, for making 1.0

Günlük görüntüsünün süresini de (işlem sayısı) sınırlandırabilirsiniz:

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all -5
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix

(yalnızca son 5 işlemi göster)


Mevcut seçilen çözüm hakkında sevmiyorum:

 git log --graph

(Sadece hızlı bir özete bakmak istediğimde) çok fazla bilgi gösterdi:

PS D:\git\tests\finalRepo> git log --graph
* commit 4919b681db93df82ead7ba6190eca6a49a9d82e7
| Author: VonC <vonc@laposte.net>
| Date:   Sat Nov 14 13:42:20 2009 +0100
|
|     a second bug10 fix
|
* commit 3469e13f8d0fadeac5fcb6f388aca69497fd08a9
| Author: VonC <vonc@laposte.net>
| Date:   Sat Nov 14 13:41:50 2009 +0100
|
|     a first bug10 fix
|

gitk harika, ancak kabuk oturumunu başka bir pencere için terk etmeye zorlarken, son n işlemeyi hızlı bir şekilde görüntülemek çoğu zaman yeterlidir.


Ben de bu yöntemi seçin, ancak "git grafik" yazmak "git log --graph - decorate --oneline" yürütme ile aynı olacak şekilde bir takma ad yaptım.
Will Pike

@ConnerPike iyi fikir. Kendim 'lg' takma adı var: bkz. Stackoverflow.com/a/3667139/6309
VonC

35

Gitg , Linux için, OS X için Gitx'e benzer harika bir araçtır. Komut satırında, deponuzun ağaç yapısının (gitx ile aynı) içindeki bir yerden 'gitg' komutunu çalıştırmanız yeterlidir.


3
Pek çok deyişle: gitg, hangi şubenin görselleştirileceğini seçebileceği bir açılır menüye sahiptir. Bu açılır menüde ayrıca "Tümü" seçeneği de vardır.
Phluks

1
Veya gitg --allaçılır menüde dolaşmaktan kaçınmak istiyorsanız ile başlatabilirsiniz .
Mart'ta imolit

25

"Git-big-picture" i oldukça faydalı buldum: https://github.com/esc/git-big-picture

Oldukça doğrusal yerine "2D / Graphviz" kullanarak oldukça 2D grafikler oluşturur. -İ seçeneğiyle dallanma noktalarını ve birleştirme işlemlerini gösterir ancak aradaki her şeyi bırakır.


kullanımı oldukça basit, eğer çok taahhüt yoksa ve basit bir çözüm istiyorsanız, belki bir deneyebilirsiniz.
wiswit

Taahhütlerin sayısı iyi olmalıdır (-i kullanırsanız), karmaşık dallarınız ve birleştirmeleriniz varsa okunamaz hale gelebilir (ancak daha sonra hangi araç yoktur)
Frank Osterfeld

1
Orta ölçekli projemizle bu, tonlarca çizgiyle büyük bir resim yaratıyor. Gittiği derinliği sınırlayabilir miyim? Yani son N gün kadar sürer.
Ondra Žižka


21

BranchMaster'a bir göz atın .

Aralarındaki tüm taahhütleri tek bir satıra daraltarak karmaşık şube yapısını görselleştirmek için yazdım. Sayılar taahhütlerin sayısını gösterir.

resim açıklamasını buraya girin


1
Aradığım şey bu. Bunu yapmak için alternatif komutlar / araçlar var mı?
Aalex Gabi

3
@AalexGabi Bunu gitconfig'nize koyun, aynı şeyi yapar, ancak komut satırında gbranch = log --graph - dekorasyona göre basitleştirin - güzel = biçim: '% C (sarı)% h% C (beyaz)% d% C (kalın siyah)% ar% C (sıfırla)% n '--all
kracejic

Şubeleri görselleştirmek için verileri nasıl alıyorsunuz?
Snowfish

15

Kimse bahsetmedi tigmi? "BranchMaster" gibi dalları katlamıyor, ama ...

Hızlıdır, terminalde çalışır.

Çok hızlı olduğu için (+ klavye kontrolü) harika bir UX elde edersiniz, lsgit depoları içeren dizinler için neredeyse " " gibidir .

https://jonas.github.io/tig/

/Arama yapmak için olağan kısayollara sahiptir .

Revizyon grafiği

(ps. bu ekran görüntüsünün arka planındaki terminal, bugünlerde daha iyi görünüyor, ancak bilgisayarım bir ekran görüntüsü almayı reddediyor, üzgünüm)

(pps. Gitkraken'i de kullanıyorum ve gerçekten net görselleştirmelere sahibim, ancak çok daha ağır tig)


Ben bir terminal aşığıyım ve Tig (Git için metin modu arayüzü) Git depolarıyla etkileşim kurmak için iyi bir araçtır, grafik görünümü ve Git geçmişi dahil olmak üzere çok yararlıdır. Git komut satırına ekstra bir araç olarak terminal severlere tavsiye ederim.
hermeslm

15

Tortoise Git'in "Revizyon Grafiği" adlı bir aracı var. Windows'taysanız, repo -> Tortoise Git -> Revizyon Grafiği'ne sağ tıklamak kadar kolay.


1
ne harika bir özellik, uzun süre kaplumbağa git kullanarak ama bu özelliği bilmiyorum.
kreamik

Bu çok daha basit. Teşekkürler.
Anoop


12

Aşağıdaki takma adları kullanıyorum.

[alias]
    lol = log --graph --decorate --pretty=oneline --abbrev-commit
    lola = log --graph --decorate --pretty=oneline --abbrev-commit --all

Renk şemasında yukarıda gördüğüm takma adlardan daha fazla bilgi var. Aynı zamanda oldukça yaygın gibi görünüyor, bu yüzden başkalarının ortamında mevcut olma ya da açıklamak zorunda kalmadan konuşmada bahsedebilme şansınız olabilir.

Ekran görüntüleri ve tam açıklama ile: http://blog.kfish.org/2010/04/git-lola.html


12

Mac kullanıcıları için, ücretsiz, açık kaynak kodlu GitUp aracına göz atın (cezalandırma amaçlı değildir): http://gitup.co/

Grafiklerin görüntülenme şeklini seviyorum, gördüğüm diğer araçlardan daha net.

Proje burada: https://github.com/git-up/GitUp

GitUp ekran görüntüsü


Bu, x eksenindeki dalları ve y eksenindeki zamanı gördüğünüz tek grafiktir. Çok sezgisel. GitUp kesinlikle harika! macOS artık değil, bu yüzden Windows'a geçiyorum ve Gitup'ı çok özleyeceğim.
w00t

11

Grafik geçmişini görüntülemek için bu git logdiğer adı var ~/.gitconfig:

[alias]
l = log --all --graph --pretty=format:'%C(auto)%h%C(auto)%d %s %C(dim white)(%aN, %ar)'

Takma ad yerinde olduğunda, şöyle bir git lşey gösterir:

resim açıklamasını buraya girin

Git 2.12 + 'da log.graphColorsyapılandırma seçeneğini kullanarak grafiğin çizgi renklerini bile özelleştirebilirsiniz .

Günlüklerin biçimine gelince --oneline, yazar adının (saygılı .mailmap) ve ilgili yazar tarihinin eklenmesiyle benzerdir . O Not %C(auto)karma taahhüt için varsayılan renkleri kullanmak Git söyler sözdizimi, vb Git> = desteklenir 1.8.3 .


1
Gerçek yazar tarihini ilk gördüğümde ve oldukça güzel! teşekkürler, bunu benim gitconfig'e ekleyeceğim!
Simon C.

Windows kullanıcıları tek tırnak çift tırnak ile değiştirmek gerekir
PierDipi

11

Kısa bir yol gösteren bu blog gönderisini buldum :

git log --oneline --abbrev-commit --all --graph --decorate --color

Genellikle yukarıdaki komut için bir takma ad oluşturuyorum:

alias gl='git log --oneline --abbrev-commit --all --graph --decorate --color'

ve basit sadece kullanın gl.

Diğer adı git config dosyasına da ekleyebilirsiniz. ~/.gitconfigAşağıdaki satırı açın ve [takma ad] 'a ekleyin.

[alias]
        lg = log --oneline --abbrev-commit --all --graph --decorate --color

ve şu şekilde kullanın: git lg


8

Kişisel favori takma adım .gitconfig aracılığıyla:

graph = log --graph --color --all --pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n"

6
Komutun nasıl görüneceğine dair küçük bir açıklama harika olurdu.
Max


7

Gitx ayrıca OS X'te olursanız harika bir görselleştirme aracıdır.


3
gitk (herkes için) çok benzer. tam olarak aynı değil, ama oldukça benzer.
xero

Gitx'in birkaç çatalları var - bu (rowanj) şu anda en iyisi gibi görünüyor.
rjmunro

7

Başka bir git log komutu. This bir sabit genişlikli sütun :

git log --graph --pretty=format:"%x09%h | %<(10,trunc)%cd |%<(25,trunc)%d | %s" --date=short



2

Denedim --simplify-by-decorationama tüm birleştirmelerim gösterilmiyor. Bunun yerine, başlıklarda "\" ve "/" simgeleri olmayan satırları budamaktan vazgeçiyorum, her zaman "(" ile hemen sonra şubeleri gösteren satırları tutarken. Ben de onları kaldırıyorum ve aşağıdaki kabuk takma adıyla karşılaşıyorum.

gbh () { 
    git log --graph --oneline --decorate "$@" | grep '^[^0-9a-f]*[\\/][^0-9a-f]*\( [0-9a-f]\|$\)\|^[^0-9a-f]*[0-9a-f]*\ (' | sed -e 's/).*/)/'
}

2

daha karmaşık hale getirebilir miyiz?

Basit git log --all --decorate --oneline --graph'a ne dersiniz (A Dog = --All --Decorate --Oneline --Graph'i hatırlayın)


1
Bu, kabul edilen cevapla aynıdır. Ancak anımsatıcı için sahne
aljgom

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.