Ketika Anda membaca di git tag
halaman manual :
Salah satu aspek penting dari git adalah didistribusikan, dan didistribusikan sebagian besar berarti tidak ada "hulu" atau "hilir" yang melekat dalam sistem.
, itu hanya berarti tidak ada repo hulu mutlak atau repo hilir.
Gagasan itu selalu relatif antara dua repo dan tergantung pada cara data mengalir:
Jika "yourRepo" telah menyatakan "otherRepo" sebagai remote, maka :
- Anda menarik dari hulu "otherRepo" ( "otherRepo" adalah "hulu dari Anda", dan Anda "downstream untuk otherRepo").
- Anda mendorong ke hulu ("otherRepo" masih "hulu", di mana informasi sekarang kembali ke).
Perhatikan "dari" dan "untuk": Anda tidak hanya "hilir", Anda "hilir dari / untuk ", karenanya aspek relatif.
Putar DVCS (Sistem Kontrol Versi Terdistribusi) adalah: Anda tidak tahu apa sebenarnya hilir, di samping repo Anda sendiri relatif terhadap repo jarak jauh yang telah Anda nyatakan.
- Anda tahu apa itu hulu (repo yang Anda tarik atau dorong)
- Anda tidak tahu apa yang hilir terbuat dari (repo lain menarik dari atau mendorong ke repo Anda ).
Pada dasarnya:
Dalam istilah " aliran data ", repo Anda berada di bagian bawah ("hilir") dari aliran yang berasal dari repo hulu ("tarik dari") dan kembali ke repo hulu (yang sama atau yang lain) ("push to" ).
Anda dapat melihat ilustrasi di git-rebase
halaman manual dengan paragraf "PEMULIHAN DARI REBASE UPSTREAM":
Itu berarti Anda menarik dari repo "hulu" di mana rebase terjadi , dan Anda (repo "hilir") terjebak dengan konsekuensinya (banyak duplikat komit, karena cabang rebased upstream menciptakan kembali komitmen dari cabang yang sama dengan Anda miliki secara lokal).
Itu buruk karena untuk satu repo "hulu", mungkin ada banyak repo hilir (yaitu repo menarik dari yang hulu, dengan cabang rebased), semuanya memiliki potensi untuk berurusan dengan komitmen duplikat.
Sekali lagi, dengan analogi "aliran data", dalam DVCS, satu perintah buruk "hulu" dapat memiliki " efek riak " di hilir.
Catatan: ini tidak terbatas pada data.
Ini juga berlaku untuk parameter , karena perintah git (seperti yang "porselen") sering memanggil secara internal perintah git lain (yang "pipa ledeng"). Lihat rev-parse
halaman manual :
Banyak perintah porselen git mengambil campuran flag (yaitu parameter yang dimulai dengan tanda hubung ' -
') dan parameter yang dimaksudkan untuk git rev-list
perintah dasar yang mereka gunakan secara internal dan flag dan parameter untuk perintah lain yang mereka gunakan di hilirgit rev-list
. Perintah ini digunakan untuk membedakan keduanya.