Git

ソースコードなどの phân tán hình バージョン quản lý システム

Git( ギット[2][3]) は,プログラムソースコードなどの変 canh lí lịch を ký lục ・ truy tích するための phân tán hìnhバージョン quản lý システムである.Linuxカーネルのソースコード quản lý に dụng いるためにリーナス・トーバルズによって khai phát され, それ dĩ hàng ほかの đa くのプロジェクトで thải dụng されている. Linuxカーネルのような cự đại プロジェクトにも đối ứng できるように, động tác tốc độ に trọng điểm が trí かれている. Hiện tại のメンテナはTân dã thuần(Anh ngữ:Junio C Hamano) で, 2005 niên 7 nguyệt から đam đương している.

Git
git logo
GitのWebインターフェース, gitweb
Khai phát nguyên Tân dã thuần,リーナス・トーバルズ,ほか đa sổ
Sơ bản 2005 niên 12 nguyệt 21 nhật(18 niên tiền )(2005-12-21)
Tối tân bản 2.45.2[1]ウィキデータを編集-2024 niên 5 nguyệt 31 nhật(50 nhật tiền )[±]
リポジトリ ウィキデータを編集
プログラミング
Ngôn ngữ
C,Bourne Shell,Tcl,Perl
Đối ứng OS Unix hệ,Linux,Windows,macOS
Chủng biệt バージョン quản lý ソフトウェア
ライセンス GNU General Public Licenseバージョン2,GNU Lesser General Public License2.1
Công thức サイト git-scm.comウィキデータを編集
テンプレートを biểu kỳ

Gitでは, các ユーザのワーキングディレクトリに, toàn lí lịch を hàm んだリポジトリの hoàn toàn な phục chế が tác られる. したがって,ネットワークにアクセスできないなどの lý do で trung tâm リポジトリにアクセスできない hoàn cảnh でも, lí lịch の điều tra や変 canh の ký lục といったほとんどの tác nghiệp を hành うことができる. これが “Phân tán hình” と hô ばれる lý do である.

Bối cảnh および khái yếu

Biên tập

Linuxカーネルの khai phát では, Linux Kernel Mailing List[※ 1]に đầu cảo される đa sổ のパッチをメンテナーたちがソースコードに thích dụng するという hình thức が thải dụng されている. これらの tác nghiệp を hiệu suất đích に hành うため, đương sơ はBitKeeperというバージョン quản lý システムを dụng いていたが, このソフトウェアはThương dụng ソフトウェアであった (クライアントはバイナリ bản のみ vô liêu で,サーバは thương dụng だがBitMover xã の hậu ý で vô liêu で sử えていた ). この trạng huống を khoái く tư わない nhân 々がBitKeeperのクローンを thật trang したことから, この hoàn cảnh が sử えなくなってしまい (BitKeeper#ライセンス vấn đềBitKeeper#価 cách 変 canhを tham chiếu ), その đại thế として2005 niên にGitが khai phát された[4].

Linuxカーネルの khai phát では, cự đại なソースコードの tập hợp を tráp うため, 変 canh điểm の trừu xuất やリポジトリ thao tác ができるかぎり cao tốc にできる tất yếu がある. Tha の dạng 々なバージョン quản lý システムをあたったが, mãn túc のいくものがなかったため, Gitではこのような vấn đề も xuất lai る hạn り giải quyết できるよう, いくつかのアイデアが đạo nhập されている ( この bộ phân は, tha のバージョン quản lý システムにも đồng dạng の cơ năng が đạo nhập されるようになった ).

Tác nghiệp の lưu れ

Biên tập

Gitは phân tán hình のソースコード quản lý システムであるため, リモートサーバ đẳng にある trung tâm リポジトリの hoàn toàn なコピーを thủ nguyên ( ローカル hoàn cảnh ) に tác thành して, そのローカルリポジトリを sử って tác nghiệp を hành う.

Nhất bàn đích な khai phát スタイルでは, đại tạp bả に ngôn えば, dĩ hạ のようなステップの sào り phản しで tác nghiệp が hành なわれる:

  1. リモートサーバ đẳng にある trung tâm リポジトリをローカルに phục chế する (git clone).
  2. ローカルでコンテンツの tu chính ・ truy gia ・ tước trừ を hành い, ローカルリポジトリに変 canh lí lịch を ký lục する (git commit). Tất yếu に ứng じて quá khứ の trạng thái の duyệt lãm や phục nguyên などを hành う. Tràng hợp によってはこのステップを hà độ か sào り phản す.
  3. ローカルの変 canh nội dung を trung tâm リポジトリに phản ánh させる (git push). Tác nghiệp giả ごとの変 canh nội dung が trùng đột することもある. Gitが tự động で giải quyết できる tràng hợp もあれば, thủ động での giải quyết (git merge ) が tất yếu なこともある.
  4. Canh tân された trung tâm リポジトリ ( tha giả の tác nghiệp nội dung も thống hợp されている ) をローカルの phục chế にも phản ánh する (git pull). これによりローカル hoàn cảnh のコードも tối tân の nội dung になるので, cải めてステップ2の tác nghiệp を hành う.

リポジトリ gian の thông tín (clone, pull, push) では dĩ hạ のプロトコルが sử dụng できる[5].

Dĩ tiền はrsyncも sử dụng できたが, 2.8.0で廃 chỉ された[9].

Thiết kế

Biên tập

Gitの thiết kế はBitKeeperMonotoneが nguyên になっている[10][11].Nguyên 々のGitはローレベルなエンジンとして thiết kế されていたが, これは, tha の khai phát giả がCogitoStGITのようなフロントエンドを dung dịch に khai phát できるようにすることを mục đích としていた[12].Hiện tại では, Gitのコア tự thể もユーザから trực tiếp lợi dụng できるようになっている[13].

Gitの thiết kế には, リーナスが đại quy mô プロジェクトのメンテナンスを hành った kinh nghiệm や, ファイルシステムのパフォーマンスに quan する thâm い tri thức, また thật dụng tính のあるシステムを đoản kỳ gian に tác thành しなければならないという soa し bách った tất yếu tính (BitKeeperを tham chiếu ) が phản ánh されている. これらの ảnh hưởng は, dĩ hạ のような hình で thật trang に hiện れている.

  • ノンリニアな khai phát スタイルに đối する cường lực なサポート. Gitではブランチやマージが cao tốc に hành える. また, ノンリニアな khai phát の lí lịch を khả thị hóa ・ナビゲートするための chuyên dụng のツールを đồng khổn している. また, ツリーに đối する1 hồi の変 canh に đối して, phục sổ hồi のマージが phát sinh するという tiền đề を trí いているが, これは変 canh điểm が phục sổ のレビュアーによってレビューされることを tưởng định しているためである.
  • Phân tán khai phát. Tha の phân tán hình バージョン quản lý システム (Mercurial,BitKeeper,Darcs,Bazaar,SVK,Monotone) と đồng dạng に, Gitでも các 々の khai phát giả がリポジトリの hoàn toàn なコピーをローカルに bảo trì しており, các khai phát giả の hành った変 canh は tha のリポジトリにコピーされる. これらの変 canh は tân しい khai phát dụng ブランチとしてインポートされる. また, ローカルな khai phát dụng ブランチへのマージも khả năng である.
  • HTTP,FTP,gitプロトコル (sshを lợi dụng したトンネリングも khả năng ) を sử dụng したリポジトリの phối bố が khả năng. また,CVSサーバのエミュレーション cơ năng を sử dụng すれば, kí tồn のCVSクライアントやIDEのプラグインからGitリポジトリにアクセスできる.
  • git-svnを sử dụng すれば,Subversionおよびsvkのリポジトリを trực tiếp thao tác できる.
  • Đại きなプロジェクトにおける処 lý の hiệu suất hóa. Gitは phi thường に cao tốc かつスケーラブルになるよう ký thuật されている[14].Mozillaによって hành われたパフォーマンステストでは, tha のリビジョンコントロールシステムと bỉ giác して10 bội, 処 lý によっては100 bội cao tốc に động tác することが kỳ された[15][16].
  • ツールキット hóa された thiết kế. gitはC ngôn ngữで thư かれたプログラム nhất thức と, それらのラッパーとなる hà bổn かのシェルスクリプトで cấu thành されている[17].GitをWindowsに di thực する quá trình で, シェルスクリプトのほとんどはC ngôn ngữ で thư き trực された. しかし, hiện tại でも phục sổ のコンポーネントを繋げることで phục tạp な処 lý を dung dịch に hành えるような thiết kế になっている[18].
  • プラガブルなマージアルゴリズム. Gitでは bất hoàn toàn なマージに đối する ưu れたモデル hóa が hành われている. また, bất hoàn toàn なマージを bổ hoàn するアルゴリズムも phục sổ tồn tại する. Tối chung đích に tự động đích なマージが hành えなかった tràng hợp には, ユーザによる biên tập が tất yếu である chỉ がユーザに thông tri される.
  • ガベージコレクションは hành われない. Thao tác を trung đoạn したり変 canh の thủ り tiêu しを hành った tràng hợp, データベース trung には bất yếu なデータが tàn ったままになる. これらのデータは thao tác đối tượng のオブジェクトの lí lịch に bỉ lệ して đại きくなる.git-gc --pruneコマンドを sử dụng して minh kỳ đích にガベージコレクションを hành うこともできるが, この処 lý には thời gian がかかる[19].

Gitの đặc trưng の nhất つとして, ディレクトリツリーに đối するスナップショットを tác thành する điểm が cử げられる. Sơ kỳ のバージョン quản lý システム (SCCSRCS) では, cá 々のファイルを処 lý の đối tượng としており, trực cận のバージョンに đối してSoa phân phù hào hóaを hành うことでリポジトリのサイズを súc tiểu することに cơ năng の trọng điểm が trí かれていた. Dĩ hàng のバージョン quản lý システムでも, この “プロジェクト nội の phục sổ バージョンにまたがって nhất つのファイルを truy tích できる” という khái niệm が継 thừa されていた.

Nhất phương, Gitではこのコンセプトを sử dụng していない[20].その kết quả として, Gitはソースコードツリー trung のファイルのリビジョン gian の quan hệ tính を ký lục しなくなっている. これにより, Gitは dĩ hạ のような đặc trưng をもつようになっている.

  • プロジェクト toàn thể の変 canh lí lịch を điều べるよりも, nhất つのファイルの変 canh lí lịch を điều べる phương が thời gian がかかる[21].Đặc định のファイルの変 canh lí lịch を thủ đắc する tràng hợp, Gitはツリーの lí lịch toàn thể を tẩu tra し, các リビジョンでそのファイルに変 canh があったかどうか điều tra する tất yếu がある. ただしこの処 lý thủ thuận では, nhất つのファイルに đối しても, nhậm ý のファイルの tập hợp に đối しても, ほぼ đồng じ thời gian で lí lịch の điều tra が hành える. よく hành われる処 lý としては, lệ えば “ソースツリー trung のあるサブディレクトリと, それに quan hệ するヘッダファイルの điều tra を hành う” といったものがある.
  • ファイル danh の変 canh を minh kỳ đích に tráp わない. CVSに đối してよく cử げられる bất mãn として, ファイルのリネームや di động を hành うと変 canh lí lịch が đồ thiết れてしまう vấn đề がある. これは, 変 canh lí lịch の thức biệt にファイル danh を sử dụng しているためである. CVS dĩ hàng に khai phát されたバージョン quản lý システムの đa くでは, quản lý đối tượng のファイルに đối してファイル danh より thọ mệnh の trường い, nội bộ đích な danh tiền (inode phiên hàoのようなもの ) を phó dữ することでこの vấn đề を giải quyết している. Nhất phương, Gitではそのような nội bộ danh を sử dụng しておらず, その điểm が trường sở であるとしている[22][23].プログラムのソースコードに đối しては, リネームの tha にも phân cát やマージといった処 lý が hành われる[24].これらの処 lý を単 thuần にファイルのリネームとして thập bả nhất lạc げに tráp うと, thật tế にソースコードツリーに đối して hành われた処 lý が hà であるか bất minh liễu なまま lí lịch に ký lục されてしまう. Gitでは, リネームの kiểm xuất をスナップショット tác thành thời ではなく lí lịch のブラウズの tế に hành うことでこの vấn đề を giải quyết している[25].( 単 thuần に khảo えれば, リビジョンN trung のあるファイルに đối して, リビジョンN-1 trung に đồng じ danh tiền のファイルがあれば, それが nguyên ファイルと khảo えられる. しかし, リビジョンN-1 trung に tự たような danh tiền のファイルがない tràng hợp もある. この tràng hợp Gitは, リビジョンN-1のみに tồn tại し, かつ tự たような nội dung のファイルを kiểm tác する. ) しかし, この処 lý は lí lịch の biểu kỳ を hành う độ にCPUに phụ hà のかかる処 lý が tất yếu となる. そのため, sử dụng するヒューリスティックを tuyển 択するオプションが đề cung されている.

リポジトリの bảo tồn phương pháp については phê phán もある.

  • Gitは tân しく tác thành されたオブジェクトを cá biệt のファイルの hình で bảo tồn する. Các ファイルは áp súc されて bảo tồn されるが, そうであったとしてもこの phương pháp は ký lục lĩnh vực を đại lượng に tất yếu とするため phi hiệu suất đích である. Gitはこの vấn đề を “pack” を sử dụng することで giải quyết している. Phục sổ のオブジェクトは nhất つのファイル ( またはネットワークバイトストリーム ) の hình にパックされ, các pack gian で soa phân áp súc が hành われる. packの soa phân áp súc にはヒューリスティックが dụng いられる. Lệ えば, đồng じ danh tiền のファイルは tự た nội dung である khả năng tính が cao いものとして処 lý される. ただし, リポジトリの chính xác tính を bảo つため, ヒューリスティックに hoàn toàn に y tồn することはない. Hiện tại のGitでも tân しく tác thành されたオブジェクト ( tân しく gia えられた lí lịch ) はまず単 nhất のファイルとして bảo tồn されるため, không gian hiệu suất を cao く bảo つためには định kỳ đích な tái パックが yếu cầu される. Gitはこの định kỳ đích な tái パックを tự động đích に hành うが,git gcコマンドを sử dụng することで thủ động で tái パックを hành うこともできる.

Gitは dĩ hạ のマージアルゴリズムを thật trang している. アルゴリズムはマージ thời に tuyển 択することができる[26].

resolve
従 lai thông りの3-wayマージアルゴリズムを sử dụng する.
recursive
3-wayマージの変 chủng を sử dụng する. ブランチのmergeやpullを hành う tràng hợp のデフォルトである. 3-wayマージにおいて cộng thông の tổ tiên が phục sổ ある tràng hợp, cộng thông の tổ tiên からのmerge treeを tác thành し, それをreference treeとして3-wayマージを hành う. Linuxカーネル2.6の khai phát で hành われたマージコミットの lí lịch から, このアルゴリズムを sử dụng するとマージの trùng đột が thiếu なく, マージ lậu れもなかったことが báo cáo されている. さらに, リネームを bạn うマージに đối しても kiểm xuất および処 lý が khả năng である[27].
octopus
3つ dĩ thượng のheadからのマージを hành う tràng hợp のデフォルトである.

Lịch sử

Biên tập

Danh tiền の do lai

Biên tập

リーナス・トーバルズによれば[28],

Phó は tự kỷ trung tâm đích な nô だから, tự phân のプロジェクトには tự phân にちなんだ danh tiền を phó けるようにしているんだ. Tối sơ はLinuxで, kim độ はGitだ.

Anh ngữ のスラングとして, Gitには “バカ” “Gian bạt け” といった loại の ý vị がある. この tự ngược ネタはもちろん bì nhục で, これはリーナスがLinuxの danh tiền を quyết める tế に tự thân の danh tiền にちなんだ danh tiền を phó けるよう cường yếu されたことから lai ている. (Linux# danh tiền の do laiを tham chiếu )

Gitのオフィシャルサイトのウィキでは, “Git” という danh tiền に đối して tha にもいくつかの giải 釈がなされている. Lệ としてはGlobal Information Trackerなどが cử げられる[29].

Khai phát sơ kỳ の lịch sử

Biên tập

Gitの khai phát は, Linuxカーネルの khai phát giả の đa くがBitKeeperのシステムに đối するアクセスを cấm chỉ されたことに đoan を phát している (BitKeeper#価 cách 変 canhを tham chiếu ). これは,アンドリュー・トリジェル(Andrew Tridgell) がプロプラエタリなソフトウェアであるBitKeeperのプロトコルをリバースエンジニアリングしたことに đối し, BitKeeperの trứ tác giả であるラリー・マクボイがこれをライセンス vi phản であるとして, BitKeeperの vô liêu đề cung を chỉ めたためである.Linux.conf.au2005のキーノートにおいて, トリジェルはこのリバースエンジニアリングの thủ thuận について thuyết minh を hành ったが, nội dung はBitKeeperのサーバの thích thiết なポートにtelnetでアクセスし “help” とタイプするだけという単 thuần なものだった[30].

リーナスはBitKeeperと đồng じように sử える phân tán hình バージョン quản lý システムを tham していたが, vô liêu のシステムで bỉ の yếu cầu ( đặc に tốc độ diện での yếu cầu ) に thích hợp するものは kiến つからなかった. リーナスが thư いたメールによると, 2005 niên 4 nguyệt 7 nhật khoảnh に tối sơ のプロトタイプを tác thành していたようである[31].

だけど, phó が kiến たSCMたちはそれ (bk pullTương đương のこと ) をするのが đại 変だったんだ. Phó がやろうとしていることの1つは ( thật はこれが nhất phiên なんだけど ) その quá trình を thập phânHiệu suất đíchにすること. もし1つのパッチを thích dụng してその変 canh の cảnh giới を ký lục するなどするのに30 miểu かかったとすると ( chính trực, Linux quy mô のプロジェクトで30 miểu っていうのは đại để のSCMでは tốc いほうの kiến tích りだけど ), 250 thông ( lệ えばAndrew[※ 2]と đồng kỳ するときには quyết して trân しい lượng じゃない ) のメールパッチを thích dụng するのに2 thời gian かかることになる.

BKはスピード cuồng ではなくて, ( tha のSCMと bỉ giác するとBKは1 hằng か2 hằng くらいは cao tốc だけど ) Andrew[※ 2]とマージをする thời に1メールにつき ước 10-15 miểu かかっていた. だけど, BKではそれは đại きな vấn đề にならなかったんだ. BK⇔BK gian のマージは giản 単だから, phó は tha の chủ yếu な khai phát giả とは thời gian がかかるメールでのマージをしたことはなかったから. パッチアプリケーションに cơ づいたSCMにするなら, "マージ cơ năng" をBKよりもTốc くしなければならなくなる. それは bổn đương に bổn đương に đại 変なこと.

だから, phó はいまスクリプトを thư いていて, 変 canh をずっと tốc く truy tích できるようにしているんだ. Tối sơ の mục tiêu はパッチを thích dụng するのと đồng じくらい cao tốc にそれを hành うこと. だけどはっきりいって, kim のところできたのは đa く kiến tích もってもまだ bán phân くらいで, tư わぬ chướng hại にぶつかったら toàn nhiên hư になるかもしれないけど. いずれにせよ, phó がそれをすぐにできる lý do は, phó のスクリプトがSCMではないからで, とても đặc biệt で "Linuxの trạng thái を ký lục する" ようなものだからなんだ. それはリニアなパッチを thập phân hiệu suất đích な thời gian でマージできるようになるだろう.

( パッチの thích dụng が3 miểu でできるなら, đại きな1つながりのパッチでも vấn đề にはならない: Đồ trung で thất bại しても1 phân か2 phân で khí がつくなら, それで thập phân で, thủ tác nghiệp で tu chính することができる. Đãi ち thời gian が trọng yếu な lý do はそこにある. -- "オフライン" で hiệu quả đích にそれができるなら, vấn đề が khởi きた thời に phó は định nghĩa どおりそれを tu lý できずにいるだろう )

リーナスは dĩ hạ のような nguyên tắc に cơ づいて thiết kế を hành っている.

  1. CVSを “Ác い kiến bổn” とする. Thiết kế thượng のことで xác tín が trì てない tràng hợp は, CVSと nghịch の quyết đoạn をする. リーナスは nhũng đàm めかして dĩ hạ のように ngữ っている.
    • “カーネルメンテナンスの tối sơ の10 niên gian, phó らは văn tự thông りtarボールとパッチを sử っていた. CVSよりもずっと ưu れたソース quản lý システムさ. Phó は営 lợi xí nghiệp (トランスメタ[32]) でCVSを7 niên gian sử わされたことで, CVSを cường liệt に tăng むようになった. CVSを cường liệt に tăng んでいると ngôn う thời には, このことも ngôn っておかなくちゃいけないね. Quan chúng の trung にSVN (Subversion) のユーザがいるなら, この tràng から khứ ったほうがいいかもしれない. Phó がCVSを cường liệt に hiềm ác しているということは, phó がSubversionが sử thượng tối đại の vô ý vị なプロジェクトであると tư っていることも ý vị しているんだ. Subversionのしばらくのスローガンは‘ちゃんとCVSをやる’とかそんなものだったよね. そんなスローガンから thủy めたら, どこにも siêm りつけないよ. CVSをちゃんとやるなんて bất khả năng なのさ.”[33]
  2. Phân tán hình の, BitKeeperのようなワークフローをサポートする.
    • “BitKeeperだけが, “まあ sử ってもいいかな” と tối sơ に tư わせてくれたSCMだというわけではないけれど, BitkeeperはSCMというものの tồn tại ý nghĩa と, thật tế にどう sử うことができるのかを giáo えてくれた. だから, Gitは kỹ thuật đích な quan điểm とかいろんなところでBitkeeperとは tùy phân vi うものになっているけど ( それはもう nhất つの thiết kế mục tiêu でもある. Bitkeeperのクローンではないことをはっきりさせたかったから ), Gitのワークフローの đa くは, Bitkeeperが giáo えてくれたフローから trực tiếp きたものになっているんだ.”[33]
  3. データ phá 壊に đối する cường lực な ức chỉ cơ năng. データ phá 壊は, ngẫu nhiên によるものと ý đồ đích なものの lạng phương を tưởng định している[34][33].
  4. Phi thường に cao い処 lý tốc độ.

Tối sơ の3つの điều kiện によって, kí tồn のバージョン quản lý システムはMonotoneを trừ き toàn て tuyển に lậu れてしまい, 4つ mục の điều kiện で cai đương するものがなくなってしまった[33].そのため, Linuxカーネル2.6.12-rc2のリリース trực hậu に[33],リーナスは tự phân で khai phát を thủy めた[33].

Gitの khai phát は2005 niên 4 nguyệt 3 nhật に khai thủy された[35].プロジェクトとしてのアナウンスは4 nguyệt 6 nhật に hành われ[36],4 nguyệt 7 nhật にはセルフホスティングされるようになった[35].4 nguyệt 18 nhật には phục sổ のブランチからのマージが tối sơ に hành われた[37].4 nguyệt 29 nhật にはリーナスの mục tiêu としていた処 lý tốc độ が thật hiện された. Linuxのカーネルツリーにパッチを đương てるベンチマークで, sơ kỳ のGitでは mỗi miểu 6.7 cá のパッチを処 lý している[38].6 nguyệt 6 nhật には, GitによるLinuxカーネル2.6.12のリリースが hành われた[39].

BitKeeperからの ảnh hưởng で, リーナスは従 lai と đồng じようなアプローチを ý đồ đích に tị けており, kết quả としてGitは phi thường にユニークな thiết kế になっている[40].Kỹ thuật に trường けたユーザがGitを lợi dụng できるようになるレベルまではリーナスが khai phát を hành っており, その hậu, 2005 niên 6 nguyệt 26 nhật にはプロジェクトへの chủ yếu な cống hiến giả であったTân dã thuần(Junio C Hamano) にメンテナンスが dẫn き継がれた[41].Tân dã は2005 niên 12 nguyệt 21 nhật にバージョン1.0のリリースを hành い[42],2021 niên 5 nguyệt hiện tại も bỉ がメンテナンスを hành っている.

ブランチモデル

Biên tập

ソフトウェア khai phát におけるGitブランチの tác thành ・ canh tân モデルをブランチモデルと hô ぶ.

GitHub flow

Biên tập

GitHub flowはブランチモデルの nhất chủng である[43].GitHub flowの phương châm は “masterブランチは thường にデプロイ khả năng” である[44].コードの変 canh を hành う tế にはトピックを danh xưng とするブランチをmasterからforkする. マージ thời を hàm め tha giả からの ý kiến mộ tập ・レビューを hành う tế にはpull request ( merge request ) を dụng いる. pull request thời に tự động hóa テスト ( c.f.継続 đích インテグレーション) をおこなうことでmergeの an toàn tính を xác bảo し,masterが thường に chính thường = デプロイ khả năng に bảo たれる. GitHub flowが hữu hiệu な phân dã は継続 đích デリバリー継続 đích デプロイメントが hữu hiệu な phân dã, lệ えばWebサービスが cử げられる.

2011 niên の đề xướng thời と bỉ giác して, GitHub xã ではモデルの nhất bộ を変 canh している. オリジナルのGitHub flowでは canh tân がmasterへマージされ, そこからデプロイされる. GitHub xã ではレビュー hậu ( CI hậu ) のtopic branchが tối chung テストとしてプロダクション hoàn cảnh へデプロイされる. そこで vấn đề がないと xác nhận されたのちにmasterへmergeされている[45].このモデル変 canh により, CIで phán minh しなかったバグが phát sinh した tràng hợp にmasterのrevert commitではなくmasterの tái デプロイで đối ứng できる.

マージ

Biên tập

Gitはブランチのマージ( merge ) に đối ứng している.

マージが hành われるとマージコミット( anh: merge commit ) が sinh thành される. コンフリクトが phát sinh しない tràng hợp,git mergeがマージコミットを tự động sinh thành する[46].コンフリクトが phát sinh した tràng hợp, まず an toàn な phạm 囲がマージされインデックスとワーキングツリーが canh tân される[47].Tự động マージできないコンフリクト bộ は, ワーキングツリーに đặc định の ký pháp で lạng phương の変 canh が tịnh ký された trạng thái になる[48].ユーザーによるコンフリクト tu chính hậugit addをおこない,git commitあるいはgit merge --continueをおこなってはじめてマージコミットが sinh thành される[49].

マージコミットの thật thể は2つ dĩ thượng のparent chúc tính を trì つただのコミットオブジェクトである ( đặc biệt なGitオブジェクトではない )[50].Thông thường のコミットオブジェクトと đồng dạng に変 canh hậu ファイルセットがtreeに ký lục され, canh tân の nguyên となっている ( phục sổ の ) コミットがparentに thiết định されているだけである.

Xuất điển

Biên tập
  1. ^Tân dã thuần;"[ANNOUNCEGit v2.45.2 and friends to unbreak "git lfs" and others "]; xuất bản nhật: 2024 niên 5 nguyệt 31 nhật; duyệt lãm nhật: 2024 niên 5 nguyệt 31 nhật.
  2. ^Tech Talk: Linus Torvalds on git.Cai đương thời gian: 1 phân 30 miểu.2014 niên 7 nguyệt 21 nhật duyệt lãm.
  3. ^Git - IT dụng ngữ từ điển e-words”.2014 niên 7 nguyệt 29 nhậtDuyệt lãm.
  4. ^Scott Chacon “1.2 sử い thủy める-Git lược sử”『Pro Git』.https://git-scm.com/book/ja/v2/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-Git%E7%95%A5%E5%8F%B2.2021 niên 3 nguyệt 7 nhậtDuyệt lãm.
  5. ^abcdeScott Chacon. “4.1 Git サーバー - プロトコル”.2013 niên 1 nguyệt 19 nhậtDuyệt lãm.
  6. ^Scott Chacon; Ben Straub. “Pro Git 2nd Edition 4.6 Gitサーバー - Smart HTTP”.2021 niên 8 nguyệt 26 nhậtDuyệt lãm.
  7. ^Git - user-manual Documentation”( anh ngữ ).2021 niên 8 nguyệt 26 nhậtDuyệt lãm. “(See also setup-git-server-over-http for a slightly more sophisticated setup using WebDAV which also allows pushing over HTTP.)”
  8. ^git-clone(1) Manual Page”( anh ngữ ).2017 niên 6 nguyệt 14 nhậtDuyệt lãm. “in addition, ftp, and ftps can be used for fetching, but this is inefficient and deprecated; do not use it”
  9. ^Documentation/RelNotes/2.8.0.txt”( anh ngữ ).2017 niên 6 nguyệt 14 nhậtDuyệt lãm. “The rsync:// transport has been removed.”
  10. ^Linus Torvalds (5 May 2006)."Re: [ANNOUNCE] Git wiki".linux-kernel(Mailing list).2009 niên 3 nguyệt 3 nhật duyệt lãm.Gitの nguyên となったプログラムに quan する lịch sử đích kinh vĩ
  11. ^Linus Torvalds (7 April 2005)."Re: Kernel SCM saga".linux-kernel(Mailing list).2009 niên 3 nguyệt 3 nhật duyệt lãm.
  12. ^Linus Torvalds (8 April 2005)."Re: Kernel SCM saga".linux-kernel(Mailing list).2008 niên 2 nguyệt 20 nhật duyệt lãm.
  13. ^Linus Torvalds (23 March 2006)."Re: Errors GITtifying GCC and Binutils".Git(Mailing list).2009 niên 3 nguyệt 3 nhật duyệt lãm.
  14. ^Linus Torvalds (19 October 2006)."Re: VCS comparison table".Git(Mailing list).2009 niên 3 nguyệt 3 nhật duyệt lãm.
  15. ^Stenback, Johnny (2006-11-30),“bzr/hg/git performance”,Jst's Blog,http://weblogs.mozillazine.org/jst/archives/2006/11/vcs_performance.html2008 niên 2 nguyệt 20 nhậtDuyệt lãm.,"git diff" と "bzr diff" のベンチマーク kết quả の bỉ giác. ケースによっては, gitの処 lý tốc độ はBazzarの100 bội dĩ thượng になる.
  16. ^Roland Dreier (2006 niên 11 nguyệt 13 nhật ). “Oh what a relief it is”.2009 niên 3 nguyệt 3 nhậtDuyệt lãm.,"git log" は "svn log" と bỉ giác して100 bội dĩ thượng cao tốc だが, これは hậu giả はリモートのサーバにアクセスする tất yếu があるためである.
  17. ^Linus Torvalds (18 October 2006)."Re: VCS comparison table".Git(Mailing list).2009 niên 3 nguyệt 3 nhật duyệt lãm.,Gitのスクリプト chỉ hướng デザインについて
  18. ^iabervon (2005 niên 12 nguyệt 22 nhật ). “Git rocks!”.2009 niên 3 nguyệt 3 nhậtDuyệt lãm.,Gitを sử ったスクリプトの thư きやすさに quan する thưởng tán
  19. ^Git User's Manual”(2007 niên 8 nguyệt 5 nhật ).2009 niên 3 nguyệt 3 nhậtDuyệt lãm.
  20. ^Linus Torvalds (10 April 2005)."Re: more git updates."linux-kernel(Mailing list).2009 niên 3 nguyệt 3 nhật duyệt lãm.
  21. ^Bruno Haible (11 February 2007)."how to speed up" git log "?".Git(Mailing list).2009 niên 3 nguyệt 3 nhật duyệt lãm.
  22. ^Linus Torvalds (1 March 2006)."Re: impure renames / history tracking".Git(Mailing list).2009 niên 3 nguyệt 3 nhật duyệt lãm.
  23. ^Junio C Hamano (24 March 2006)."Re: Errors GITtifying GCC and Binutils".Git(Mailing list).2009 niên 3 nguyệt 3 nhật duyệt lãm.
  24. ^Junio C Hamano (23 March 2006)."Re: Errors GITtifying GCC and Binutils".Git(Mailing list).2009 niên 3 nguyệt 3 nhật duyệt lãm.
  25. ^Linus Torvalds (28 November 2006)."Re: git and bzr".Git(Mailing list).2009 niên 3 nguyệt 3 nhật duyệt lãm.,git-blameコマンドを sử dụng したソースファイル gian のコードの di động の điều tra について
  26. ^Linus Torvalds (2007 niên 7 nguyệt 18 nhật ). “git-merge(1)”.2009 niên 3 nguyệt 4 nhậtDuyệt lãm.
  27. ^Linus Torvalds (2007 niên 7 nguyệt 18 nhật ). “CrissCrossMerge”.2009 niên 3 nguyệt 4 nhậtDuyệt lãm.
  28. ^“After controversy, Torvalds begins work on git”.InfoWorld.(2005-04-19).ISSN0199-6649.http://www.infoworld.com/article/05/04/19/HNtorvaldswork_1.html2008 niên 2 nguyệt 20 nhậtDuyệt lãm..
  29. ^GitFaq: Why the 'git' name?”.2007 niên 3 nguyệt 21 nhậtDuyệt lãm.
  30. ^Jonathan Corbet (2005-04-20),“How Tridge reverse engineered BitKeeper”,Linux Weekly News,http://lwn.net/Articles/132938/2009 niên 3 nguyệt 26 nhậtDuyệt lãm.
  31. ^Linus Torvalds (7 April 2005)."Re: Kernel SCM saga."linux-kernel(Mailing list).2009 niên 3 nguyệt 26 nhật duyệt lãm.
  32. ^Linus Torvalds(31 October 2005)."Re: git versus CVS (versus bk)".Git(Mailing list).2009 niên 3 nguyệt 26 nhật duyệt lãm.
  33. ^abcdefLinus Torvalds (3 May 2007).Google tech talk: Linus Torvalds on git.Cai đương thời gian: 02:30.2007 niên 5 nguyệt 16 nhật duyệt lãm.
  34. ^Linus Torvalds(10 June 2007)."Re: fatal: serious inflate inconsistency".Git(Mailing list).2009 niên 3 nguyệt 26 nhật duyệt lãm.Gitにおけるデータの hoàn toàn tính に quan する thiết kế mục tiêu に quan する khái yếu thuyết minh.
  35. ^abLinus Torvalds (27 February 2007)."Re: Trivia: When did git self-host?".Git(Mailing list).2009 niên 3 nguyệt 26 nhật duyệt lãm.
  36. ^Linus Torvalds (6 April 2005)."Kernel SCM saga."linux-kernel(Mailing list).2009 niên 3 nguyệt 26 nhật duyệt lãm.
  37. ^Linus Torvalds (17 April 2005)."First ever real kernel git merge!".Git(Mailing list).2009 niên 3 nguyệt 26 nhật duyệt lãm.
  38. ^Matt Mackall (29 April 2005)."Mercurial 0.4b vs git patchbomb benchmark".Git(Mailing list).2009 niên 3 nguyệt 26 nhật duyệt lãm.
  39. ^Linus Torvalds (17 June 2005)."Linux 2.6.12".git-commits-head(Mailing list).2009 niên 3 nguyệt 26 nhật duyệt lãm.
  40. ^Linus Torvalds (20 October 2006)."Re: VCS comparison table".Git(Mailing list).2009 niên 3 nguyệt 26 nhật duyệt lãm.Git vs. BitKeeperの nghị luận
  41. ^Linus Torvalds (27 July 2005)."Meet the new maintainer..."Git(Mailing list).2009 niên 3 nguyệt 26 nhật duyệt lãm.
  42. ^Tân dã thuần(Junio C Hamano) (21 December 2005)."ANNOUNCE: GIT 1.0.0".Git(Mailing list).2009 niên 3 nguyệt 26 nhật duyệt lãm.
  43. ^abScott Chacon (2011 niên 8 nguyệt 31 nhật ). “GitHub Flow”.2020 niên 5 nguyệt 31 nhậtDuyệt lãm.
  44. ^"#1 - anything in the master branch is deployable.
    This is basically the only hardruleof the system. "[43]
  45. ^GitHub Guides”.2020 niên 5 nguyệt 31 nhậtDuyệt lãm. “With GitHub, you can deploy from a branch for final testing in production before merging to master.”
  46. ^"A merged version... is committed, and yourHEAD,index, and working tree are updated to it. "[git 1]
  47. ^"Paths that merged cleanly are updated both in the index file and in your working tree."[git 1]
  48. ^"When both sides made changes to the same area, however, Git cannot randomly pick one side over the other, and asks you to resolve it by leaving what both sides did to that area."[git 1]
  49. ^"Edit the files into shape and git add them to the index. Use git commit or git merge --continue to seal the deal."[git 1]
  50. ^"the branches to be merged must be tied together by a merge commit that has both of them as its parents."[git 1]
  1. ^abcdegit-merge - git2020-11-01 duyệt lãm

Quan liên hạng mục

Biên tập

Ngoại bộ リンク

Biên tập