[{"data":1,"prerenderedAt":2847},["ShallowReactive",2],{"/ja-jp/blog/whats-new-in-git-2-56-0":3,"navigation-ja-jp":2097,"banner-ja-jp":2528,"footer-ja-jp":2536,"blog-post-authors-ja-jp-Karthik Nayak":2790,"blog-related-posts-ja-jp-whats-new-in-git-2-56-0":2805,"blog-share-wrapper-ja-jp":2829,"next-steps-ja-jp":2839},{"id":4,"title":5,"authors":6,"body":8,"category":2075,"date":2076,"description":2077,"extension":2078,"externalUrl":2079,"faq":2079,"featured":2080,"heroImage":2081,"meta":2082,"navigation":436,"path":2083,"seo":2084,"slug":2088,"stem":2089,"tags":2090,"template":2094,"updatedDate":2095,"__hash__":2096},"blogPosts/ja-jp/blog/whats-new-in-git-2-56-0.md","Git 2.56.0の新機能",[7],"Karthik Nayak",{"type":9,"value":10,"toc":2059},"minimark",[11,28,31,81,85,94,105,108,119,122,131,134,189,192,195,200,221,231,273,279,297,300,303,347,358,365,474,477,554,575,611,633,644,647,670,848,856,870,873,882,887,907,1029,1032,1058,1061,1073,1080,1150,1156,1199,1224,1228,1247,1333,1342,1365,1369,1390,1417,1420,1428,1594,1610,1804,1822,1924,1938,1940,1952,1955,2023,2026,2038,2041,2055],[12,13,14,15,21,22,27],"p",{},"Gitプロジェクトから先日、",[16,17,20],"a",{"href":18,"rel":19},"https://lore.kernel.org/git/xmqqpkxxmgxh.fsf@gitster.g/T/#u",[],"Git 2.56.0","がリリースされました。GitLabの",[16,23,26],{"href":24,"rel":25},"https://handbook.gitlab.com/handbook/engineering/infrastructure-platforms/tenant-scale/git/",[],"Gitチーム","による貢献も含め、今回のリリースの注目点を紹介します。",[12,29,30],{},"本記事で取り上げる内容:",[32,33,34,41,51,57,63,69,75],"ul",{},[35,36,37],"li",{},[16,38,40],{"href":39},"#git-merge-2026%E3%81%A8git-30%E3%81%AE%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E8%A8%88%E7%94%BB","Git Merge 2026とGit 3.0のリリース計画",[35,42,43],{},[16,44,46,47],{"href":45},"#git-history1%E3%81%AB%E5%8A%A0%E3%82%8F%E3%81%A3%E3%81%9Fdrop","git-history(1)に加わった",[48,49,50],"code",{},"drop",[35,52,53],{},[16,54,56],{"href":55},"#git-branch1%E3%81%A7%E3%83%9E%E3%83%BC%E3%82%B8%E6%B8%88%E3%81%BF%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B","git-branch(1)でマージ済みブランチを削除する",[35,58,59],{},[16,60,62],{"href":61},"#git-refs1%E3%81%A7%E5%8F%82%E7%85%A7%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B","git-refs(1)で参照を変更する",[35,64,65],{},[16,66,68],{"href":67},"#google-summer-of-code-2026","Google Summer of Code 2026",[35,70,71],{},[16,72,74],{"href":73},"#git-replay1%E3%81%A7%E5%B1%A5%E6%AD%B4%E3%82%92%E7%9B%B4%E7%B7%9A%E5%8C%96%E3%81%99%E3%82%8B","git-replay(1)で履歴を直線化する",[35,76,77],{},[16,78,80],{"href":79},"#%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E5%8C%96","オブジェクトデータベースのプラグイン化",[82,83,40],"h2",{"id":84},"git-merge-2026とgit-30のリリース計画",[12,86,87,88,93],{},"今回のリリースサイクルは、リスボンで開催された",[16,89,92],{"href":90,"rel":91},"https://git-merge.com/",[],"Git Merge 2026","と重なりました。会期は3日間で、初日がJJ Con、2日目がGit Talks、最終日がアンカンファレンスとGit Contributor Summitという構成です。Git Talksのセッションは近日中に公開される予定です。",[12,95,96,97,104],{},"Git Contributor Summitで大きな議題となったのが、Git 3.0のリリースをめぐる計画でした。Gitの",[16,98,101],{"href":99,"rel":100},"https://git-scm.com/docs/BreakingChanges",[],[48,102,103],{},"Documentation/BreakingChanges.adoc","には3.0で予定されている変更がまとめられていますが、これまでは「この破壊的変更を含むバージョンのリリース日は未定」という但し書きが付いていました。その前提が、今回のContributor Summitでの議論によって変わります。",[12,106,107],{},"Git 3.0で予定されている主な変更は次のとおりです。",[32,109,110,113,116],{},[35,111,112],{},"オブジェクトのハッシュ形式のデフォルトをSHA-256にする",[35,114,115],{},"参照のストレージ形式のデフォルトをreftableにする",[35,117,118],{},"Rustを任意の依存関係ではなく必須の依存関係にする",[12,120,121],{},"これらの変更を実現するコード自体は、現行のGitにすでに入っています。ただし、Gitのライブラリやアプリケーション、フォージを含むエコシステム全体を見ると、対応状況にはばらつきがあるのが実情です。エコシステム側の対応が追いつかなければ、あるツールでは新機能が使えるのに別のツールでは動かないという宙ぶらりんの状態にユーザーが置かれてしまいます。",[12,123,124,125,130],{},"なかでもSHA-256については、フォージ側の対応が最大の懸念材料でした。GitLabは",[16,126,129],{"href":127,"rel":128},"https://about.gitlab.com/blog/gitlab-now-supports-sha256-repositories/",[],"1年前から","SHA-256に対応しています。GitHubもGit Mergeの場でプライベートベータを発表しており、数か月後には一般公開される見通しです。",[12,132,133],{},"こうした状況を踏まえ、サミットでの議論はGit 3.0に向けた次のスケジュールにまとまりました。",[135,136,137,150],"table",{},[138,139,140],"thead",{},[141,142,143,147],"tr",{},[144,145,146],"th",{},"リリース",[144,148,149],{},"時期",[151,152,153,165,175],"tbody",{},[141,154,155,162],{},[156,157,158],"td",{},[159,160,161],"strong",{},"2.56",[156,163,164],{},"2026年9月（本リリース）",[141,166,167,172],{},[156,168,169],{},[159,170,171],{},"2.98",[156,173,174],{},"2026年12月",[141,176,177,186],{},[156,178,179,182,183],{},[159,180,181],{},"2.99"," および ",[159,184,185],{},"3.0",[156,187,188],{},"2027年春",[12,190,191],{},"2.56の次は2.98へと一気に番号を飛ばす計画です。この大きなジャンプは、大きな変更が近いことをダウンストリームのメンテナーとユーザーの双方に伝えるシグナルになります。その後は2.99と3.0を同時に出荷し、両者の違いは破壊的変更の機能フラグが有効かどうかだけ。こうすることで2.99と3.0の機能を揃えたまま、3.0での変更を小さく限定的に抑えられます。",[12,193,194],{},"2.99はLTSリリースと位置付けられ、Rustのツールチェーンを持たないプラットフォームでも引き続きアップデートを受け取れます。詳細については、いつものとおりメーリングリスト上で議論が進みます。",[82,196,46,198],{"id":197},"git-history1に加わったdrop",[48,199,50],{},[12,201,202,207,208,213,214,217,218,220],{},[16,203,206],{"href":204,"rel":205},"https://about.gitlab.com/blog/whats-new-in-git-2-55-0/#git-history1-learns-fixup",[],"Git 2.55のブログ記事","では、",[16,209,212],{"href":210,"rel":211},"https://git-scm.com/docs/git-history",[],"git-history(1)","の",[48,215,216],{},"fixup","サブコマンドを取り上げました。今回のリリースでは、同じコマンドに新しく",[48,219,50],{},"サブコマンドが加わります。",[12,222,223,224,227,228,230],{},"既存のコミットを削除したい場合、これまでは",[48,225,226],{},"git rebase -i","を実行し、エディタ上で対象のコミットを1つずつ対話的にマークするという手順が必要でした。新しい",[48,229,50],{},"サブコマンドを使えば、同じ操作がたった1行で済みます。",[232,233,238],"pre",{"className":234,"code":235,"language":236,"meta":237,"style":237},"language-shell shiki shiki-themes github-light","$ git history drop \u003Ccommit>\n","shell","",[48,239,240],{"__ignoreMap":237},[241,242,245,249,253,256,259,263,266,270],"span",{"class":243,"line":244},"line",1,[241,246,248],{"class":247},"s7eDp","$",[241,250,252],{"class":251},"sYBdl"," git",[241,254,255],{"class":251}," history",[241,257,258],{"class":251}," drop",[241,260,262],{"class":261},"sD7c4"," \u003C",[241,264,265],{"class":251},"commi",[241,267,269],{"class":268},"sgsFI","t",[241,271,272],{"class":261},">\n",[12,274,275,276,278],{},"指定したコミットが削除され、その子孫にあたるコミットは親コミットの上にリベースされます。",[48,277,212],{},"の他のサブコマンドと同様に、元のコミットの子孫にあたるブランチはすべて、書き換え後のコミットを指すように更新されます。",[12,280,281],{},[282,283,284,285,290,291,296],"em",{},"この",[16,286,289],{"href":287,"rel":288},"https://gitlab.com/git-scm/git/-/commit/d11b348f7840c7ae4aba5d273ff56c813475a88e",[],"パッチ","は",[16,292,295],{"href":293,"rel":294},"https://gitlab.com/pks-gitlab",[],"Patrick Steinhardt","氏によって提出されました。",[82,298,56],{"id":299},"git-branch1でマージ済みブランチを削除する",[12,301,302],{},"マージ済みのブランチを整理するとき、筆者はこれまで次のようなコマンドを使ってきました。",[232,304,306],{"className":234,"code":305,"language":236,"meta":237,"style":237},"$ git branch --merged main | grep -v main | xargs git branch --delete\n",[48,307,308],{"__ignoreMap":237},[241,309,310,312,314,317,321,324,327,330,333,335,337,340,342,344],{"class":243,"line":244},[241,311,248],{"class":247},[241,313,252],{"class":251},[241,315,316],{"class":251}," branch",[241,318,320],{"class":319},"sYu0t"," --merged",[241,322,323],{"class":251}," main",[241,325,326],{"class":261}," |",[241,328,329],{"class":247}," grep",[241,331,332],{"class":319}," -v",[241,334,323],{"class":251},[241,336,326],{"class":261},[241,338,339],{"class":247}," xargs",[241,341,252],{"class":251},[241,343,316],{"class":251},[241,345,346],{"class":319}," --delete\n",[12,348,349,350,353,354,357],{},"ただしこの方法で削除できるのは、指定したブランチにマージされたブランチだけです。",[48,351,352],{},"main","から分岐して",[48,355,356],{},"origin/main","にマージされたブランチは、対象から漏れてしまいます。今回のリリースでは、この課題を埋める2つのフラグが追加されました。",[12,359,360,361,364],{},"1つ目は",[48,362,363],{},"--forked","フラグです。これは一覧表示用のフィルターで、設定されたアップストリームが指定した参照・リモート名・ブランチと一致するブランチだけを表示します。",[232,366,368],{"className":234,"code":367,"language":236,"meta":237,"style":237},"$ git switch --create feature-a origin/main\nSwitched to a new branch 'feature-a'\nbranch 'feature-a' set up to track 'origin/main'.\n\n$ git branch --forked origin\n  feature-a\n  feature-b\n* main\n",[48,369,370,388,408,431,438,453,459,465],{"__ignoreMap":237},[241,371,372,374,376,379,382,385],{"class":243,"line":244},[241,373,248],{"class":247},[241,375,252],{"class":251},[241,377,378],{"class":251}," switch",[241,380,381],{"class":319}," --create",[241,383,384],{"class":251}," feature-a",[241,386,387],{"class":251}," origin/main\n",[241,389,391,394,397,400,403,405],{"class":243,"line":390},2,[241,392,393],{"class":247},"Switched",[241,395,396],{"class":251}," to",[241,398,399],{"class":251}," a",[241,401,402],{"class":251}," new",[241,404,316],{"class":251},[241,406,407],{"class":251}," 'feature-a'\n",[241,409,411,414,417,420,423,425,428],{"class":243,"line":410},3,[241,412,413],{"class":247},"branch",[241,415,416],{"class":251}," 'feature-a'",[241,418,419],{"class":251}," set",[241,421,422],{"class":251}," up",[241,424,396],{"class":251},[241,426,427],{"class":251}," track",[241,429,430],{"class":251}," 'origin/main'.\n",[241,432,434],{"class":243,"line":433},4,[241,435,437],{"emptyLinePlaceholder":436},true,"\n",[241,439,441,443,445,447,450],{"class":243,"line":440},5,[241,442,248],{"class":247},[241,444,252],{"class":251},[241,446,316],{"class":251},[241,448,449],{"class":319}," --forked",[241,451,452],{"class":251}," origin\n",[241,454,456],{"class":243,"line":455},6,[241,457,458],{"class":247},"  feature-a\n",[241,460,462],{"class":243,"line":461},7,[241,463,464],{"class":247},"  feature-b\n",[241,466,468,471],{"class":243,"line":467},8,[241,469,470],{"class":261},"*",[241,472,473],{"class":268}," main\n",[12,475,476],{},"これにより、特定の統合ブランチから派生したブランチを把握できます。各ブランチの状態は次のように確認します。",[232,478,480],{"className":234,"code":479,"language":236,"meta":237,"style":237},"$ git branch -vv\n  feature-a b3ebf58 [origin/main: behind 1] Add feature A\n  feature-b 34c0403 [origin/main: ahead 1, behind 1] Add feature B\n* main      230a3b0 [origin/main] Document the parser\n",[48,481,482,493,519,547],{"__ignoreMap":237},[241,483,484,486,488,490],{"class":243,"line":244},[241,485,248],{"class":247},[241,487,252],{"class":251},[241,489,316],{"class":251},[241,491,492],{"class":319}," -vv\n",[241,494,495,498,501,504,507,510,513,516],{"class":243,"line":390},[241,496,497],{"class":247},"  feature-a",[241,499,500],{"class":251}," b3ebf58",[241,502,503],{"class":268}," [origin/main: ",[241,505,506],{"class":251},"behind",[241,508,509],{"class":251}," 1]",[241,511,512],{"class":251}," Add",[241,514,515],{"class":251}," feature",[241,517,518],{"class":251}," A\n",[241,520,521,524,527,529,532,535,538,540,542,544],{"class":243,"line":410},[241,522,523],{"class":247},"  feature-b",[241,525,526],{"class":251}," 34c0403",[241,528,503],{"class":268},[241,530,531],{"class":251},"ahead",[241,533,534],{"class":251}," 1,",[241,536,537],{"class":251}," behind",[241,539,509],{"class":251},[241,541,512],{"class":251},[241,543,515],{"class":251},[241,545,546],{"class":251}," B\n",[241,548,549,551],{"class":243,"line":433},[241,550,470],{"class":261},[241,552,553],{"class":268}," main      230a3b0 [origin/main] Document the parser\n",[12,555,556,557,560,561,563,564,566,567,570,571,574],{},"この例では",[48,558,559],{},"feature-a","が",[48,562,356],{},"より遅れており、すでに",[48,565,356],{},"へマージ済みであることを示しています。一方の",[48,568,569],{},"feature-b","はまだマージされていません。このユーザビリティ上のギャップを埋めるのが、もう1つの新オプション",[48,572,573],{},"--delete-merged","です。設定されたアップストリームから先端コミットに到達できるブランチをすべて削除するため、統合ブランチにマージ済みのフィーチャーブランチを一括で片付けられます。",[232,576,578],{"className":234,"code":577,"language":236,"meta":237,"style":237},"$ git branch --delete-merged origin\nDeleted branch feature-a (was b3ebf58).\n",[48,579,580,593],{"__ignoreMap":237},[241,581,582,584,586,588,591],{"class":243,"line":244},[241,583,248],{"class":247},[241,585,252],{"class":251},[241,587,316],{"class":251},[241,589,590],{"class":319}," --delete-merged",[241,592,452],{"class":251},[241,594,595,598,600,602,605,608],{"class":243,"line":390},[241,596,597],{"class":247},"Deleted",[241,599,316],{"class":251},[241,601,384],{"class":251},[241,603,604],{"class":268}," (was ",[241,606,607],{"class":251},"b3ebf58",[241,609,610],{"class":268},").\n",[612,613,614],"blockquote",{},[12,615,616,619,620,213,623,628,629,632],{},[159,617,618],{},"ヒント:"," これらのオプションは、ブランチが統合ブランチを追跡していることを前提としています。ローカルの統合ブランチから分岐する運用であれば、",[48,621,622],{},"branch.autoSetupMerge",[16,624,627],{"href":625,"rel":626},"https://git-scm.com/docs/git-config#Documentation/git-config.txt-inherit",[],"設定","にある",[48,630,631],{},"inherit","を確認してみてください。",[12,634,635],{},[282,636,637,638,643],{},"この機能はHarald Nordgren氏によって",[16,639,642],{"href":640,"rel":641},"https://lore.kernel.org/git/pull.2285.v25.git.git.1785939877.gitgitgadget@gmail.com/",[],"提出","されました。",[82,645,62],{"id":646},"git-refs1で参照を変更する",[12,648,649,650,655,656,659,660,659,663,659,666,669],{},"Git 2.46で導入された",[16,651,654],{"href":652,"rel":653},"https://git-scm.com/docs/git-refs",[],"git-refs(1)","は、参照に関わる操作をまとめる新しい受け皿です。導入以降、ストレージバックエンド間での参照の移行、整合性チェック、既存参照の一覧表示、参照の存在確認といったサブコマンドが順次追加されてきました。今回のリリースで加わったのは、参照の",[48,657,658],{},"create","、",[48,661,662],{},"delete",[48,664,665],{},"update",[48,667,668],{},"rename","への対応です。",[232,671,673],{"className":234,"code":672,"language":236,"meta":237,"style":237},"$ git refs list\n689f6e8164e070ed133d5176806ad69e31d22142 commit refs/heads/branch-d\n689f6e8164e070ed133d5176806ad69e31d22142 commit refs/heads/branch-r\n689f6e8164e070ed133d5176806ad69e31d22142 commit refs/heads/branch-u\n689f6e8164e070ed133d5176806ad69e31d22142 commit refs/heads/main\n\n$ git refs create refs/heads/branch-c main\n$ git refs update refs/heads/branch-u main~1\n$ git refs rename refs/heads/branch-r refs/heads/foo\n$ git refs delete refs/heads/branch-d\n\n$ git refs list\n689f6e8164e070ed133d5176806ad69e31d22142 commit refs/heads/branch-c\nc4e9b6bafb7ac9a96c5d9337cd60a0ec6d5a240d commit refs/heads/branch-u\n689f6e8164e070ed133d5176806ad69e31d22142 commit refs/heads/foo\n689f6e8164e070ed133d5176806ad69e31d22142 commit refs/heads/main\n",[48,674,675,687,698,707,716,725,729,745,762,780,794,799,810,820,830,839],{"__ignoreMap":237},[241,676,677,679,681,684],{"class":243,"line":244},[241,678,248],{"class":247},[241,680,252],{"class":251},[241,682,683],{"class":251}," refs",[241,685,686],{"class":251}," list\n",[241,688,689,692,695],{"class":243,"line":390},[241,690,691],{"class":247},"689f6e8164e070ed133d5176806ad69e31d22142",[241,693,694],{"class":251}," commit",[241,696,697],{"class":251}," refs/heads/branch-d\n",[241,699,700,702,704],{"class":243,"line":410},[241,701,691],{"class":247},[241,703,694],{"class":251},[241,705,706],{"class":251}," refs/heads/branch-r\n",[241,708,709,711,713],{"class":243,"line":433},[241,710,691],{"class":247},[241,712,694],{"class":251},[241,714,715],{"class":251}," refs/heads/branch-u\n",[241,717,718,720,722],{"class":243,"line":440},[241,719,691],{"class":247},[241,721,694],{"class":251},[241,723,724],{"class":251}," refs/heads/main\n",[241,726,727],{"class":243,"line":455},[241,728,437],{"emptyLinePlaceholder":436},[241,730,731,733,735,737,740,743],{"class":243,"line":461},[241,732,248],{"class":247},[241,734,252],{"class":251},[241,736,683],{"class":251},[241,738,739],{"class":251}," create",[241,741,742],{"class":251}," refs/heads/branch-c",[241,744,473],{"class":251},[241,746,747,749,751,753,756,759],{"class":243,"line":467},[241,748,248],{"class":247},[241,750,252],{"class":251},[241,752,683],{"class":251},[241,754,755],{"class":251}," update",[241,757,758],{"class":251}," refs/heads/branch-u",[241,760,761],{"class":251}," main~1\n",[241,763,765,767,769,771,774,777],{"class":243,"line":764},9,[241,766,248],{"class":247},[241,768,252],{"class":251},[241,770,683],{"class":251},[241,772,773],{"class":251}," rename",[241,775,776],{"class":251}," refs/heads/branch-r",[241,778,779],{"class":251}," refs/heads/foo\n",[241,781,783,785,787,789,792],{"class":243,"line":782},10,[241,784,248],{"class":247},[241,786,252],{"class":251},[241,788,683],{"class":251},[241,790,791],{"class":251}," delete",[241,793,697],{"class":251},[241,795,797],{"class":243,"line":796},11,[241,798,437],{"emptyLinePlaceholder":436},[241,800,802,804,806,808],{"class":243,"line":801},12,[241,803,248],{"class":247},[241,805,252],{"class":251},[241,807,683],{"class":251},[241,809,686],{"class":251},[241,811,813,815,817],{"class":243,"line":812},13,[241,814,691],{"class":247},[241,816,694],{"class":251},[241,818,819],{"class":251}," refs/heads/branch-c\n",[241,821,823,826,828],{"class":243,"line":822},14,[241,824,825],{"class":247},"c4e9b6bafb7ac9a96c5d9337cd60a0ec6d5a240d",[241,827,694],{"class":251},[241,829,715],{"class":251},[241,831,833,835,837],{"class":243,"line":832},15,[241,834,691],{"class":247},[241,836,694],{"class":251},[241,838,779],{"class":251},[241,840,842,844,846],{"class":243,"line":841},16,[241,843,691],{"class":247},[241,845,694],{"class":251},[241,847,724],{"class":251},[12,849,850,852,853,855],{},[48,851,665],{},"と",[48,854,662],{},"のサブコマンドでは、変更前の値を任意で指定できます。指定した場合は、操作を実行する前にその値が現在の値と一致するかどうかが検証されます。",[12,857,858],{},[282,859,860,861,864,865,643],{},"これらのパッチは",[16,862,295],{"href":293,"rel":863},[],"氏によって",[16,866,869],{"href":867,"rel":868},"https://lore.kernel.org/git/20260706-pks-refs-writing-subcommands-v4-0-d51f6ce7f830@pks.im/",[],"実装",[82,871,68],{"id":872},"google-summer-of-code-2026",[12,874,875,876,881],{},"今回のリリースは、",[16,877,880],{"href":878,"rel":879},"https://summerofcode.withgoogle.com/",[],"Google Summer of Code","の4つのプロジェクトがすべて無事に完了した節目でもあります。いずれのプロジェクトにも、GitLabのエンジニアがメンターとして加わりました。",[883,884,886],"h3",{"id":885},"git-cat-file1へのremote-object-infoコマンドの追加","git-cat-file(1)へのremote-object-infoコマンドの追加",[12,888,889,890,895,896,213,899,902,903,906],{},"部分クローンを使うと、すべてのオブジェクトをダウンロードしなくてもリポジトリを操作できます。Gitは必要になった時点でオブジェクトを遅延取得する仕組みです。",[16,891,894],{"href":892,"rel":893},"https://git-scm.com/docs/git-cat-file",[],"git-cat-file(1)","は指定したオブジェクトハッシュのobject-infoを読み取れますが、その際にはオブジェクト全体の転送が発生していました。Git 2.56では",[16,897,894],{"href":892,"rel":898},[],[48,900,901],{},"--batch-command","モードに",[48,904,905],{},"remote-object-info","コマンドが追加され、Gitプロトコルv2経由でメタデータだけを要求できるようになりました。blobを一切含まないblobless cloneを例に見てみましょう。",[232,908,910],{"className":234,"code":909,"language":236,"meta":237,"style":237},"$ git rev-parse HEAD:model.weights\n42ec5fc0f485f764cdf0eaa85ab061c055f5f518\n\n$ git cat-file --batch-all-objects --batch-check | grep -c blob\n0\n\n$ echo \"remote-object-info origin 42ec5fc0f485f764cdf0eaa85ab061c055f5f518\" |\n    git cat-file --batch-command\n42ec5fc0f485f764cdf0eaa85ab061c055f5f518 blob 3000000\n\n$ git cat-file --batch-all-objects --batch-check | grep -c blob\n0\n",[48,911,912,924,929,933,958,963,967,980,990,1001,1005,1025],{"__ignoreMap":237},[241,913,914,916,918,921],{"class":243,"line":244},[241,915,248],{"class":247},[241,917,252],{"class":251},[241,919,920],{"class":251}," rev-parse",[241,922,923],{"class":251}," HEAD:model.weights\n",[241,925,926],{"class":243,"line":390},[241,927,928],{"class":247},"42ec5fc0f485f764cdf0eaa85ab061c055f5f518\n",[241,930,931],{"class":243,"line":410},[241,932,437],{"emptyLinePlaceholder":436},[241,934,935,937,939,942,945,948,950,952,955],{"class":243,"line":433},[241,936,248],{"class":247},[241,938,252],{"class":251},[241,940,941],{"class":251}," cat-file",[241,943,944],{"class":319}," --batch-all-objects",[241,946,947],{"class":319}," --batch-check",[241,949,326],{"class":261},[241,951,329],{"class":247},[241,953,954],{"class":319}," -c",[241,956,957],{"class":251}," blob\n",[241,959,960],{"class":243,"line":440},[241,961,962],{"class":247},"0\n",[241,964,965],{"class":243,"line":455},[241,966,437],{"emptyLinePlaceholder":436},[241,968,969,971,974,977],{"class":243,"line":461},[241,970,248],{"class":247},[241,972,973],{"class":251}," echo",[241,975,976],{"class":251}," \"remote-object-info origin 42ec5fc0f485f764cdf0eaa85ab061c055f5f518\"",[241,978,979],{"class":261}," |\n",[241,981,982,985,987],{"class":243,"line":467},[241,983,984],{"class":247},"    git",[241,986,941],{"class":251},[241,988,989],{"class":319}," --batch-command\n",[241,991,992,995,998],{"class":243,"line":764},[241,993,994],{"class":247},"42ec5fc0f485f764cdf0eaa85ab061c055f5f518",[241,996,997],{"class":251}," blob",[241,999,1000],{"class":319}," 3000000\n",[241,1002,1003],{"class":243,"line":782},[241,1004,437],{"emptyLinePlaceholder":436},[241,1006,1007,1009,1011,1013,1015,1017,1019,1021,1023],{"class":243,"line":796},[241,1008,248],{"class":247},[241,1010,252],{"class":251},[241,1012,941],{"class":251},[241,1014,944],{"class":319},[241,1016,947],{"class":319},[241,1018,326],{"class":261},[241,1020,329],{"class":247},[241,1022,954],{"class":319},[241,1024,957],{"class":251},[241,1026,1027],{"class":243,"line":801},[241,1028,962],{"class":247},[12,1030,1031],{},"このようにblob本体を転送することなく、そのサイズだけを取得できます。300万バイト分のネットワーク帯域の節約です。",[12,1033,1034],{},[282,1035,284,1036,290,1041,1046,1047,1051,1052,1057],{},[16,1037,1040],{"href":1038,"rel":1039},"https://summerofcode.withgoogle.com/programs/2026/projects/752yzmwm",[],"プロジェクト",[16,1042,1045],{"href":1043,"rel":1044},"https://pablosabater.dev/",[],"Pablo Sabater","氏が担当し、Eric Ju氏とCalvin Wan氏が着手していた作業を引き継ぐ形で進められました。メンターは",[16,1048,7],{"href":1049,"rel":1050},"https://gitlab.com/knayakgl",[],"氏と",[16,1053,1056],{"href":1054,"rel":1055},"https://chand-ra.github.io/",[],"Chandra Pratap","氏です。",[883,1059,1060],{"id":1060},"部分クローンのディスク容量回収の改善",[12,1062,1063,1064,213,1069,1072],{},"部分クローンはblobを遅延取得することで、ディスク容量を大きく節約します。ただし時間が経つにつれて取得したblobが積み重なり、リポジトリが肥大化して当初の利点は薄れがちです。このGSoCプロジェクトで追加されたのが、",[16,1065,1068],{"href":1066,"rel":1067},"https://git-scm.com/docs/git-repack",[],"git-repack(1)",[48,1070,1071],{},"--drop-filtered","オプションです。指定したフィルターを超えるサイズのpromisor blobを見つけ出し、ローカルから削除します。",[12,1074,1075,1076,1079],{},"次の例は、履歴に3MBのblobを含むリポジトリをフィルター付きでクローンしたものです。",[48,1077,1078],{},"git clone","の直後はリポジトリのサイズが小さいものの、blobを参照しただけでローカルディスクに取得されてしまいます。",[232,1081,1083],{"className":234,"code":1082,"language":236,"meta":237,"style":237},"$ du -sh .git\n144K    .git\n\n$ git cat-file -s b8086a678595c9fce29d980f7a12ca069b466f6c\n3000000\n\n$ du -sh .git\n3.1M    .git\n",[48,1084,1085,1098,1106,1110,1124,1129,1133,1143],{"__ignoreMap":237},[241,1086,1087,1089,1092,1095],{"class":243,"line":244},[241,1088,248],{"class":247},[241,1090,1091],{"class":251}," du",[241,1093,1094],{"class":319}," -sh",[241,1096,1097],{"class":251}," .git\n",[241,1099,1100,1103],{"class":243,"line":390},[241,1101,1102],{"class":247},"144K",[241,1104,1105],{"class":251},"    .git\n",[241,1107,1108],{"class":243,"line":410},[241,1109,437],{"emptyLinePlaceholder":436},[241,1111,1112,1114,1116,1118,1121],{"class":243,"line":433},[241,1113,248],{"class":247},[241,1115,252],{"class":251},[241,1117,941],{"class":251},[241,1119,1120],{"class":319}," -s",[241,1122,1123],{"class":251}," b8086a678595c9fce29d980f7a12ca069b466f6c\n",[241,1125,1126],{"class":243,"line":440},[241,1127,1128],{"class":247},"3000000\n",[241,1130,1131],{"class":243,"line":455},[241,1132,437],{"emptyLinePlaceholder":436},[241,1134,1135,1137,1139,1141],{"class":243,"line":461},[241,1136,248],{"class":247},[241,1138,1091],{"class":251},[241,1140,1094],{"class":319},[241,1142,1097],{"class":251},[241,1144,1145,1148],{"class":243,"line":467},[241,1146,1147],{"class":247},"3.1M",[241,1149,1105],{"class":251},[12,1151,1152,1153,1155],{},"このblobはワークツリーには必要ありませんが、自動的に取り除く仕組みはありませんでした。",[48,1154,1071],{},"を実行するとblobが破棄され、将来必要になった時点でGitが改めて遅延取得します。",[232,1157,1159],{"className":234,"code":1158,"language":236,"meta":237,"style":237},"$ git repack -a -d --filter=blob:limit=1k --drop-filtered\n$ du -sh .git\n156K    .git\n",[48,1160,1161,1182,1192],{"__ignoreMap":237},[241,1162,1163,1165,1167,1170,1173,1176,1179],{"class":243,"line":244},[241,1164,248],{"class":247},[241,1166,252],{"class":251},[241,1168,1169],{"class":251}," repack",[241,1171,1172],{"class":319}," -a",[241,1174,1175],{"class":319}," -d",[241,1177,1178],{"class":319}," --filter=blob:limit=1k",[241,1180,1181],{"class":319}," --drop-filtered\n",[241,1183,1184,1186,1188,1190],{"class":243,"line":390},[241,1185,248],{"class":247},[241,1187,1091],{"class":251},[241,1189,1094],{"class":319},[241,1191,1097],{"class":251},[241,1193,1194,1197],{"class":243,"line":410},[241,1195,1196],{"class":247},"156K",[241,1198,1105],{"class":251},[12,1200,1201],{},[282,1202,284,1203,290,1207,1212,1213,1051,1218,1223],{},[16,1204,1040],{"href":1205,"rel":1206},"https://summerofcode.withgoogle.com/programs/2026/projects/hs14IFAn",[],[16,1208,1211],{"href":1209,"rel":1210},"https://siddharth.shrimali.info/",[],"Siddharth Shrimali","氏が担当し、",[16,1214,1217],{"href":1215,"rel":1216},"https://gitlab.com/chriscool",[],"Christian Couder",[16,1219,1222],{"href":1220,"rel":1221},"https://gitlab.com/edith007",[],"Siddharth Asthana","氏がメンターを務めました。",[883,1225,1227],{"id":1226},"新しいgit-repoコマンドの改善","新しいgit repoコマンドの改善",[12,1229,1230,1235,1236,1239,1240,852,1243,1246],{},[16,1231,1234],{"href":1232,"rel":1233},"https://git-scm.com/docs/git-repo",[],"git-repo(1)","コマンドは、リポジトリに関する情報を取得するコマンドです。GSoCプロジェクトの一環として、",[48,1237,1238],{},"git repo info","サブコマンドに",[48,1241,1242],{},"path.gitdir",[48,1244,1245],{},"path.commondir","が追加されました。いずれも絶対パスと相対パスの両方の形式で取得できます。",[232,1248,1250],{"className":234,"code":1249,"language":236,"meta":237,"style":237},"$ git repo info --all\nlayout.bare=false\nlayout.shallow=false\nobject.format=sha1\npath.commondir.absolute=/home/karthik/code/git/.git\npath.commondir.relative=.git\npath.gitdir.absolute=/home/karthik/code/git/.git\npath.gitdir.relative=.git\nreferences.format=reftable\n",[48,1251,1252,1267,1278,1287,1295,1303,1311,1318,1325],{"__ignoreMap":237},[241,1253,1254,1256,1258,1261,1264],{"class":243,"line":244},[241,1255,248],{"class":247},[241,1257,252],{"class":251},[241,1259,1260],{"class":251}," repo",[241,1262,1263],{"class":251}," info",[241,1265,1266],{"class":319}," --all\n",[241,1268,1269,1272,1275],{"class":243,"line":390},[241,1270,1271],{"class":247},"layout.bare",[241,1273,1274],{"class":251},"=",[241,1276,1277],{"class":319},"false\n",[241,1279,1280,1283,1285],{"class":243,"line":410},[241,1281,1282],{"class":247},"layout.shallow",[241,1284,1274],{"class":251},[241,1286,1277],{"class":319},[241,1288,1289,1292],{"class":243,"line":433},[241,1290,1291],{"class":247},"object.format",[241,1293,1294],{"class":251},"=sha1\n",[241,1296,1297,1300],{"class":243,"line":440},[241,1298,1299],{"class":247},"path.commondir.absolute",[241,1301,1302],{"class":251},"=/home/karthik/code/git/.git\n",[241,1304,1305,1308],{"class":243,"line":455},[241,1306,1307],{"class":247},"path.commondir.relative",[241,1309,1310],{"class":251},"=.git\n",[241,1312,1313,1316],{"class":243,"line":461},[241,1314,1315],{"class":247},"path.gitdir.absolute",[241,1317,1302],{"class":251},[241,1319,1320,1323],{"class":243,"line":467},[241,1321,1322],{"class":247},"path.gitdir.relative",[241,1324,1310],{"class":251},[241,1326,1327,1330],{"class":243,"line":764},[241,1328,1329],{"class":247},"references.format",[241,1331,1332],{"class":251},"=reftable\n",[12,1334,1335,1336,1341],{},"パス関連の情報をさらに追加するパッチについては、現在",[16,1337,1340],{"href":1338,"rel":1339},"https://lore.kernel.org/git/20260911144519.1011780-1-jayatheerthkulkarni2005@gmail.com/",[],"メーリングリスト","で議論が進んでいます。",[12,1343,1344],{},[282,1345,284,1346,290,1350,1212,1355,1051,1360,1223],{},[16,1347,1040],{"href":1348,"rel":1349},"https://summerofcode.withgoogle.com/programs/2026/projects/O1nF3zMT",[],[16,1351,1354],{"href":1352,"rel":1353},"https://jayatheerth.com/",[],"K Jayatheerth",[16,1356,1359],{"href":1357,"rel":1358},"https://gitlab.com/justintobler",[],"Justin Tobler",[16,1361,1364],{"href":1362,"rel":1363},"https://lucasoshiro.github.io/en/",[],"Lucas Seiki Oshiro",[883,1366,1368],{"id":1367},"gitのグローバル状態の削減","Gitのグローバル状態の削減",[12,1370,1371,1372,1375,1376,1379,1380,1383,1384,1386,1387,1389],{},"Gitのコアコードベースは、よく知られた",[48,1373,1374],{},"the_repository","変数から数多くの設定オプションに至るまで、いまだにグローバル状態への依存が強く残っています。これがGitのライブラリ化を進めるうえでの障害でした。本プロジェクトでは、グローバルな設定変数の一部を",[48,1377,1378],{},"struct repository","上の新しい",[48,1381,1382],{},"repo_config_values","構造体へ移しています。呼び出し側も、グローバルな",[48,1385,1374],{},"を使うのではなく",[48,1388,1378],{},"を明示的に渡す形へと更新されました。",[12,1391,1392],{},[282,1393,284,1394,290,1398,1212,1403,1406,1407,1406,1412,1223],{},[16,1395,1040],{"href":1396,"rel":1397},"https://summerofcode.withgoogle.com/programs/2026/projects/Lx1PmL4k",[],[16,1399,1402],{"href":1400,"rel":1401},"https://malon7782.github.io/gsoc-blog-2026/",[],"Tian Yuchen",[16,1404,1217],{"href":1215,"rel":1405},[],"氏、",[16,1408,1411],{"href":1409,"rel":1410},"https://ayu-ch.github.io/",[],"Ayush Chandekar",[16,1413,1416],{"href":1414,"rel":1415},"https://cloobtech.hashnode.dev/",[],"Bello Caleb Olamide",[82,1418,74],{"id":1419},"git-replay1で履歴を直線化する",[12,1421,1422,1427],{},[16,1423,1426],{"href":1424,"rel":1425},"https://git-scm.com/docs/git-replay",[],"git-replay(1)","は、サーバーサイドでのリベースを可能にする実験的なコマンドです。動作にワークツリーを必要としません。",[232,1429,1431],{"className":234,"code":1430,"language":236,"meta":237,"style":237},"$ git log --oneline --graph --all\n* 1756840 (main) main: unrelated upstream work\n| * 286e7f1 (topic) topic: add two\n| * 4324bcd topic: add one\n|/\n* 9497867 Initial commit\n\n$ git replay --ref-action=print --onto main topic\nupdate refs/heads/topic a144de2fc13ac40c8a481052be5e4d42071c4908 286e7f186f229ac4dd5ecb68a372951003f16224\n\n$ git log --oneline --graph a144de2fc13ac40c8a481052be5e4d42071c4908\n* a144de2 topic: add two\n* 6422f37 topic: add one\n* 1756840 (main) main: unrelated upstream work\n* 9497867 Initial commit\n",[48,1432,1433,1450,1462,1476,1494,1501,1508,1512,1532,1545,1549,1564,1571,1578,1588],{"__ignoreMap":237},[241,1434,1435,1437,1439,1442,1445,1448],{"class":243,"line":244},[241,1436,248],{"class":247},[241,1438,252],{"class":251},[241,1440,1441],{"class":251}," log",[241,1443,1444],{"class":319}," --oneline",[241,1446,1447],{"class":319}," --graph",[241,1449,1266],{"class":319},[241,1451,1452,1454,1457,1459],{"class":243,"line":390},[241,1453,470],{"class":261},[241,1455,1456],{"class":268}," 1756840 (",[241,1458,352],{"class":247},[241,1460,1461],{"class":268},") main: unrelated upstream work\n",[241,1463,1464,1467,1470,1473],{"class":243,"line":410},[241,1465,1466],{"class":261},"|",[241,1468,1469],{"class":247}," *",[241,1471,1472],{"class":251}," 286e7f1",[241,1474,1475],{"class":268}," (topic) topic: add two\n",[241,1477,1478,1480,1482,1485,1488,1491],{"class":243,"line":433},[241,1479,1466],{"class":261},[241,1481,1469],{"class":247},[241,1483,1484],{"class":251}," 4324bcd",[241,1486,1487],{"class":251}," topic:",[241,1489,1490],{"class":251}," add",[241,1492,1493],{"class":251}," one\n",[241,1495,1496,1498],{"class":243,"line":440},[241,1497,1466],{"class":261},[241,1499,1500],{"class":247},"/\n",[241,1502,1503,1505],{"class":243,"line":455},[241,1504,470],{"class":261},[241,1506,1507],{"class":268}," 9497867 Initial commit\n",[241,1509,1510],{"class":243,"line":461},[241,1511,437],{"emptyLinePlaceholder":436},[241,1513,1514,1516,1518,1521,1524,1527,1529],{"class":243,"line":467},[241,1515,248],{"class":247},[241,1517,252],{"class":251},[241,1519,1520],{"class":251}," replay",[241,1522,1523],{"class":319}," --ref-action=print",[241,1525,1526],{"class":319}," --onto",[241,1528,323],{"class":251},[241,1530,1531],{"class":251}," topic\n",[241,1533,1534,1536,1539,1542],{"class":243,"line":764},[241,1535,665],{"class":247},[241,1537,1538],{"class":251}," refs/heads/topic",[241,1540,1541],{"class":251}," a144de2fc13ac40c8a481052be5e4d42071c4908",[241,1543,1544],{"class":251}," 286e7f186f229ac4dd5ecb68a372951003f16224\n",[241,1546,1547],{"class":243,"line":782},[241,1548,437],{"emptyLinePlaceholder":436},[241,1550,1551,1553,1555,1557,1559,1561],{"class":243,"line":796},[241,1552,248],{"class":247},[241,1554,252],{"class":251},[241,1556,1441],{"class":251},[241,1558,1444],{"class":319},[241,1560,1447],{"class":319},[241,1562,1563],{"class":251}," a144de2fc13ac40c8a481052be5e4d42071c4908\n",[241,1565,1566,1568],{"class":243,"line":801},[241,1567,470],{"class":261},[241,1569,1570],{"class":268}," a144de2 topic: add two\n",[241,1572,1573,1575],{"class":243,"line":812},[241,1574,470],{"class":261},[241,1576,1577],{"class":268}," 6422f37 topic: add one\n",[241,1579,1580,1582,1584,1586],{"class":243,"line":822},[241,1581,470],{"class":261},[241,1583,1456],{"class":268},[241,1585,352],{"class":247},[241,1587,1461],{"class":268},[241,1589,1590,1592],{"class":243,"line":832},[241,1591,470],{"class":261},[241,1593,1507],{"class":268},[12,1595,1596,1597,1600,1601,1603,1604,1606,1607,1609],{},"ただし、これまでは1つ課題がありました。マージコミットを含むコミット範囲では動作しなかった点です。たとえば",[48,1598,1599],{},"feature","ブランチで作業している最中に、",[48,1602,352],{},"に入ったバグ修正を",[48,1605,1599],{},"ブランチにもマージしたとします。その結果、",[48,1608,1599],{},"ブランチには次のようにマージコミットが含まれます。",[232,1611,1613],{"className":234,"code":1612,"language":236,"meta":237,"style":237},"$ git log --graph --oneline --decorate --all\n* cb996b6 (HEAD -> feature) feature: handle the empty-input edge case\n*   4f76f3d Merge branch 'bugfix' into feature\n|\\\n| * 4959734 (main, bugfix) bugfix: do not crash on null input\n* | 829b62c feature: add parser tests\n* | 7fd60db feature: add the parser\n|/\n* 9497867 Initial commit\n\n$ git replay --onto main main..feature\nfatal: replaying merge commits is not supported yet!\n",[48,1614,1615,1632,1653,1666,1673,1709,1729,1748,1754,1760,1764,1779],{"__ignoreMap":237},[241,1616,1617,1619,1621,1623,1625,1627,1630],{"class":243,"line":244},[241,1618,248],{"class":247},[241,1620,252],{"class":251},[241,1622,1441],{"class":251},[241,1624,1447],{"class":319},[241,1626,1444],{"class":319},[241,1628,1629],{"class":319}," --decorate",[241,1631,1266],{"class":319},[241,1633,1634,1636,1639,1642,1645,1648,1650],{"class":243,"line":390},[241,1635,470],{"class":261},[241,1637,1638],{"class":268}," cb996b6 (",[241,1640,1641],{"class":247},"HEAD",[241,1643,1644],{"class":268}," -",[241,1646,1647],{"class":261},">",[241,1649,515],{"class":251},[241,1651,1652],{"class":268},") feature: handle the empty-input edge case\n",[241,1654,1655,1657,1660,1663],{"class":243,"line":410},[241,1656,470],{"class":261},[241,1658,1659],{"class":268},"   4f76f3d Merge branch ",[241,1661,1662],{"class":251},"'bugfix'",[241,1664,1665],{"class":268}," into feature\n",[241,1667,1668,1670],{"class":243,"line":433},[241,1669,1466],{"class":261},[241,1671,1672],{"class":319},"\\\n",[241,1674,1675,1677,1679,1682,1685,1688,1691,1694,1697,1700,1703,1706],{"class":243,"line":440},[241,1676,1466],{"class":261},[241,1678,1469],{"class":247},[241,1680,1681],{"class":319}," 4959734",[241,1683,1684],{"class":268}," (main, ",[241,1686,1687],{"class":251},"bugfix",[241,1689,1690],{"class":268},") bugfix: ",[241,1692,1693],{"class":261},"do",[241,1695,1696],{"class":247}," not",[241,1698,1699],{"class":251}," crash",[241,1701,1702],{"class":251}," on",[241,1704,1705],{"class":251}," null",[241,1707,1708],{"class":251}," input\n",[241,1710,1711,1713,1715,1718,1721,1723,1726],{"class":243,"line":455},[241,1712,470],{"class":261},[241,1714,326],{"class":261},[241,1716,1717],{"class":247}," 829b62c",[241,1719,1720],{"class":251}," feature:",[241,1722,1490],{"class":251},[241,1724,1725],{"class":251}," parser",[241,1727,1728],{"class":251}," tests\n",[241,1730,1731,1733,1735,1738,1740,1742,1745],{"class":243,"line":461},[241,1732,470],{"class":261},[241,1734,326],{"class":261},[241,1736,1737],{"class":247}," 7fd60db",[241,1739,1720],{"class":251},[241,1741,1490],{"class":251},[241,1743,1744],{"class":251}," the",[241,1746,1747],{"class":251}," parser\n",[241,1749,1750,1752],{"class":243,"line":467},[241,1751,1466],{"class":261},[241,1753,1500],{"class":247},[241,1755,1756,1758],{"class":243,"line":764},[241,1757,470],{"class":261},[241,1759,1507],{"class":268},[241,1761,1762],{"class":243,"line":782},[241,1763,437],{"emptyLinePlaceholder":436},[241,1765,1766,1768,1770,1772,1774,1776],{"class":243,"line":796},[241,1767,248],{"class":247},[241,1769,252],{"class":251},[241,1771,1520],{"class":251},[241,1773,1526],{"class":319},[241,1775,323],{"class":251},[241,1777,1778],{"class":251}," main..feature\n",[241,1780,1781,1784,1787,1790,1793,1796,1798,1801],{"class":243,"line":801},[241,1782,1783],{"class":247},"fatal:",[241,1785,1786],{"class":251}," replaying",[241,1788,1789],{"class":251}," merge",[241,1791,1792],{"class":251}," commits",[241,1794,1795],{"class":251}," is",[241,1797,1696],{"class":251},[241,1799,1800],{"class":251}," supported",[241,1802,1803],{"class":251}," yet!\n",[12,1805,1806,1807,1809,1810,1813,1814,1817,1818,1821],{},"このように、マージコミットが存在すると",[48,1808,1426],{},"はリベースを拒否します。Git 2.56で追加された",[48,1811,1812],{},"--linearize","は、",[48,1815,1816],{},"git-rebase(1)","ですでにデフォルトとなっている",[48,1819,1820],{},"--no-rebase-merges","オプションに近い動作をします。",[232,1823,1825],{"className":234,"code":1824,"language":236,"meta":237,"style":237},"$ git replay --linearize --onto main main..feature\n$ git log --graph --oneline --decorate --all\n* da8df6e (HEAD -> feature) feature: handle the empty-input edge case\n* f68889f feature: add parser tests\n* f13885b feature: add the parser\n* 4959734 (main, bugfix) bugfix: do not crash on null input\n* 9497867 Initial commit\n",[48,1826,1827,1844,1860,1877,1884,1891,1918],{"__ignoreMap":237},[241,1828,1829,1831,1833,1835,1838,1840,1842],{"class":243,"line":244},[241,1830,248],{"class":247},[241,1832,252],{"class":251},[241,1834,1520],{"class":251},[241,1836,1837],{"class":319}," --linearize",[241,1839,1526],{"class":319},[241,1841,323],{"class":251},[241,1843,1778],{"class":251},[241,1845,1846,1848,1850,1852,1854,1856,1858],{"class":243,"line":390},[241,1847,248],{"class":247},[241,1849,252],{"class":251},[241,1851,1441],{"class":251},[241,1853,1447],{"class":319},[241,1855,1444],{"class":319},[241,1857,1629],{"class":319},[241,1859,1266],{"class":319},[241,1861,1862,1864,1867,1869,1871,1873,1875],{"class":243,"line":410},[241,1863,470],{"class":261},[241,1865,1866],{"class":268}," da8df6e (",[241,1868,1641],{"class":247},[241,1870,1644],{"class":268},[241,1872,1647],{"class":261},[241,1874,515],{"class":251},[241,1876,1652],{"class":268},[241,1878,1879,1881],{"class":243,"line":433},[241,1880,470],{"class":261},[241,1882,1883],{"class":268}," f68889f feature: add parser tests\n",[241,1885,1886,1888],{"class":243,"line":440},[241,1887,470],{"class":261},[241,1889,1890],{"class":268}," f13885b feature: add the parser\n",[241,1892,1893,1895,1898,1901,1904,1906,1908,1910,1912,1914,1916],{"class":243,"line":455},[241,1894,470],{"class":261},[241,1896,1897],{"class":268}," 4959734 (",[241,1899,1900],{"class":247},"main,",[241,1902,1903],{"class":251}," bugfix",[241,1905,1690],{"class":268},[241,1907,1693],{"class":261},[241,1909,1696],{"class":247},[241,1911,1699],{"class":251},[241,1913,1702],{"class":251},[241,1915,1705],{"class":251},[241,1917,1708],{"class":251},[241,1919,1920,1922],{"class":243,"line":461},[241,1921,470],{"class":261},[241,1923,1507],{"class":268},[12,1925,1926],{},[282,1927,1928,1929,864,1934,643],{},"この機能は",[16,1930,1933],{"href":1931,"rel":1932},"https://gitlab.com/toon",[],"Toon Claes",[16,1935,642],{"href":1936,"rel":1937},"https://lore.kernel.org/git/20260831-toon-git-replay-drop-merges-v9-0-61c4232c6f36@iotcl.com/",[],[82,1939,80],{"id":80},[12,1941,1942,1947,1948,1951],{},[16,1943,1946],{"href":1944,"rel":1945},"https://about.gitlab.com/blog/whats-new-in-git-2-54-0/#pluggable-object-databases",[],"2.54のリリースブログ","では、プラグイン可能なオブジェクトデータベースとは何か、どのように動作するのかを解説しました。おさらいすると、Gitはオブジェクト（blob、tree、commit）を",[48,1949,1950],{},".git/objects","配下に2種類の形式で保存します。個別のファイルとして置かれる「loose」オブジェクトと、複数のオブジェクトをまとめて圧縮した「パックファイル」です。これまでは抽象化レイヤーが存在せず、各サブシステムがストレージ層に直接手を伸ばしてオブジェクトを操作していました。2.54でようやく抽象化レイヤーが導入され、この状況が変わっています。",[12,1953,1954],{},"今回のリリースでは、バックエンドを真の意味でプラグイン可能にするために必要なインターフェースの整備が、さらに一歩進みました。具体的には次のとおりです。",[32,1956,1957,1966,1978,1995,2001,2007,2017],{},[35,1958,1959,1962,1963,1965],{},[159,1960,1961],{},"オンディスクのデータ構造の作成。"," リポジトリの初期化時に",[48,1964,1950],{},"フォルダーが作成されますが、この責務が個々のバックエンド側に移りました。",[35,1967,1968,1971,1972,1977],{},[159,1969,1970],{},"整合性チェック。"," ",[16,1973,1976],{"href":1974,"rel":1975},"https://git-scm.com/docs/git-fsck",[],"git-fsck(1)","の一部だった整合性チェックがオブジェクトソース層に移り、バックエンドごとに独自の整合性チェックを実装できるようになりました。",[35,1979,1980,1971,1983,1988,1989,1994],{},[159,1981,1982],{},"ハウスキーピング。",[16,1984,1987],{"href":1985,"rel":1986},"https://git-scm.com/docs/git-gc",[],"git-gc(1)","や",[16,1990,1993],{"href":1991,"rel":1992},"https://git-scm.com/docs/git-maintenance",[],"git-maintenance(1)","に含まれていたfilesバックエンド固有のハウスキーピング処理（増分リパック、幾何学的リパック、プルーニング）が、コマンド側からfilesオブジェクトソースへ移されました。",[35,1996,1997,2000],{},[159,1998,1999],{},"パックファイルの生成。"," Gitはfetch/pushの際にgit-pack-objects(1)を呼び出し、プロトコルの一部としてパックファイルを生成します。今後はバックエンド自身がパックファイルを提供できます。",[35,2002,2003,2006],{},[159,2004,2005],{},"オブジェクトソースの個別化。"," 前回のリリースでlooseオブジェクトのバックエンドが分離されたのに続き、パック済みオブジェクトのバックエンドも独自のオブジェクトソースへ移りました。",[35,2008,2009,2012,2013,2016],{},[159,2010,2011],{},"読み取りストリームと書き込みストリームの統合。"," 分かれていた読み取り用と書き込み用のオブジェクトストリームが",[48,2014,2015],{},"struct odb_stream","に一本化され、任意のオブジェクト型をストリーム処理できるようになりました。",[35,2018,2019,2022],{},[159,2020,2021],{},"ODBトランザクションの利用。"," git-receive-pack(1)がODBトランザクションを使うように変更されました。バックエンドの実装を前提とせず、インターフェース経由でオブジェクトを書き込めます。",[12,2024,2025],{},"ほかにも多くの変更が含まれています。これだけ大量の変更が入ったにもかかわらず、ユーザーから見た挙動は何も変わりません。これは意図したとおりの結果です。GitLabにとっては、必要に応じてバックエンドを差し替えられるようになることで、Gitを大規模に運用するための基盤が整うことを意味します。しかもそれを、Gitコミュニティの一員として進められます。続報にご期待ください。",[12,2027,2028],{},[282,2029,2030,2031,1051,2034,2037],{},"これらの変更は",[16,2032,1359],{"href":1357,"rel":2033},[],[16,2035,295],{"href":293,"rel":2036},[],"氏の共同作業によって提出されました。",[82,2039,2040],{"id":2040},"詳細はこちら",[12,2042,2043,2044,2048,2049,2054],{},"本記事では、今回のリリースに対するGitLabとGitコミュニティからの貢献のごく一部を紹介しました。全体像については、Gitプロジェクトの",[16,2045,2047],{"href":18,"rel":2046},[],"公式リリースアナウンス","をご覧ください。また、",[16,2050,2053],{"href":2051,"rel":2052},"https://about.gitlab.com/ja-jp/blog/tags/git/",[],"これまでのGitリリースのブログ記事","では、GitLabチームメンバーによる過去の貢献の数々を紹介しています。",[2056,2057,2058],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}",{"title":237,"searchDepth":390,"depth":390,"links":2060},[2061,2062,2064,2065,2066,2072,2073,2074],{"id":84,"depth":390,"text":40},{"id":197,"depth":390,"text":2063},"git-history(1)に加わったdrop",{"id":299,"depth":390,"text":56},{"id":646,"depth":390,"text":62},{"id":872,"depth":390,"text":68,"children":2067},[2068,2069,2070,2071],{"id":885,"depth":410,"text":886},{"id":1060,"depth":410,"text":1060},{"id":1226,"depth":410,"text":1227},{"id":1367,"depth":410,"text":1368},{"id":1419,"depth":390,"text":74},{"id":80,"depth":390,"text":80},{"id":2040,"depth":390,"text":2040},"open-source","2026-09-28","最新のGitリリースにおける新機能と変更点を紹介します。git-history(1)の新しいdropサブコマンド、参照を変更できるようになったgit-refs(1)の新サブコマンド、git-replay(1)による履歴の直線化などを取り上げます。","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782732487/ztwgrvlolpifo01vj8qc.png",{},"/ja-jp/blog/whats-new-in-git-2-56-0",{"config":2085,"title":2086,"description":2087},{"noIndex":2080},"Git 2.56.0の新機能とGit 3.0リリース計画の概要","Git 2.56.0の新機能と変更点を解説します。git-history(1)の新しいdropサブコマンド、git-refs(1)による参照の作成・更新・削除・リネーム、git-replay(1)での履歴の直線化、さらにGit 3.0のリリーススケジュールまでを紹介します。","whats-new-in-git-2-56-0","ja-jp/blog/whats-new-in-git-2-56-0",[2091,2092,2093],"open source","git","community","BlogPost","2026-09-29","TUfSvjOOaYhFlco5LKE12sPlatpvZtZMlYANeC2ypps",{"logo":2098,"freeTrial":2103,"sales":2108,"login":2113,"items":2118,"search":2447,"minimal":2480,"duo":2498,"switchNav":2507,"pricingDeployment":2518},{"config":2099},{"href":2100,"dataGaName":2101,"dataGaLocation":2102},"/ja-jp/","gitlab logo","header",{"text":2104,"config":2105},"無料トライアルを開始",{"href":2106,"dataGaName":2107,"dataGaLocation":2102},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp&glm_content=default-saas-trial/","free trial",{"text":2109,"config":2110},"デモをリクエスト",{"href":2111,"dataGaName":2112,"dataGaLocation":2102},"/request-a-demo/","sales",{"text":2114,"config":2115},"サインイン",{"href":2116,"dataGaName":2117,"dataGaLocation":2102},"https://gitlab.com/users/sign_in/","sign in",[2119,2204,2292,2297,2371,2425],{"text":2120,"left":436,"config":2121,"menu":2123},"プラットフォーム",{"dataNavLevelOne":2122},"platform",{"type":2124,"link":2125,"columns":2129,"feature":2194},"lists",{"text":2126,"config":2127},"プラットフォームを詳しく見る",{"href":2128,"dataGaName":2122,"dataGaLocation":2102},"/ja-jp/platform/",[2130,2153,2176],{"title":2131,"items":2132},"実行とワークフロー",[2133,2138,2143,2148],{"text":2134,"config":2135},"CI/CD",{"href":2136,"dataGaLocation":2102,"dataGaName":2137},"/ja-jp/solutions/continuous-integration/","ci/cd",{"text":2139,"config":2140},"ソースコード管理",{"href":2141,"dataGaLocation":2102,"dataGaName":2142},"/ja-jp/solutions/source-code-management/","source code management",{"text":2144,"config":2145},"アジャイルデリバリー",{"href":2146,"dataGaLocation":2102,"dataGaName":2147},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":2149,"config":2150},"アーティファクト管理",{"href":2151,"dataGaLocation":2102,"dataGaName":2152},"/ja-jp/artifact-central/","artifact management",{"title":2154,"items":2155},"セキュリティとガバナンス",[2156,2161,2166,2171],{"text":2157,"config":2158},"アプリケーションセキュリティテスト",{"href":2159,"dataGaLocation":2102,"dataGaName":2160},"/ja-jp/solutions/application-security-testing/","application security testing",{"text":2162,"config":2163},"ガバナンスとコンプライアンス",{"href":2164,"dataGaLocation":2102,"dataGaName":2165},"/ja-jp/solutions/software-compliance/","governance and compliance",{"text":2167,"config":2168},"シークレット管理",{"href":2169,"dataGaLocation":2102,"dataGaName":2170},"/ja-jp/gitlab-secrets-manager/","secrets management",{"text":2172,"config":2173},"サプライチェーンセキュリティ",{"href":2174,"dataGaLocation":2102,"dataGaName":2175},"/ja-jp/solutions/supply-chain/","supply chain security",{"title":2177,"items":2178},"コンテキストとAI",[2179,2184,2189],{"text":2180,"config":2181},"エージェント型オーケストレーション",{"href":2182,"dataGaLocation":2102,"dataGaName":2183},"/ja-jp/gitlab-duo-agent-platform/","agentic orchestration",{"text":2185,"config":2186},"コンテキストグラフ",{"href":2187,"dataGaLocation":2102,"dataGaName":2188},"/ja-jp/gitlab-orbit/","context graph",{"text":2190,"config":2191},"可視性と測定",{"href":2192,"dataGaLocation":2102,"dataGaName":2193},"/ja-jp/solutions/visibility-measurement/","visibility and measurement",{"config":2195,"title":2198,"text":2199,"link":2200},{"background":2196,"textColor":2197},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1790185102/o7dn32anqcb6z8dgd3as.jpg')","#000","GitLabが選ばれる理由","ひとつのプラットフォームで、ソフトウェアライフサイクル全体を通じてスピードと制御を両立できます。",{"text":2040,"config":2201},{"href":2202,"dataGaName":2203,"dataGaLocation":2102},"/ja-jp/why-gitlab/","why gitlab",{"text":2205,"left":436,"config":2206,"menu":2208},"ソリューション",{"dataNavLevelOne":2207},"solutions",{"type":2124,"link":2209,"columns":2213,"feature":2283},{"text":2210,"config":2211},"すべてのソリューションを表示",{"href":2212,"dataGaName":2207,"dataGaLocation":2102},"/ja-jp/solutions/",[2214,2232,2250],{"title":2215,"items":2216},"成果",[2217,2222,2227],{"text":2218,"config":2219},"DevOpsモダナイゼーション",{"href":2220,"dataGaLocation":2102,"dataGaName":2221},"/ja-jp/assessments/devops-modernization-assessment/","devops modernization",{"text":2223,"config":2224},"セキュリティモダナイゼーション",{"href":2225,"dataGaLocation":2102,"dataGaName":2226},"/ja-jp/assessments/security-modernization-assessment/","security modernization",{"text":2228,"config":2229},"AIモダナイゼーション",{"href":2230,"dataGaLocation":2102,"dataGaName":2231},"/ja-jp/assessments/ai-modernization-assessment/","ai modernization",{"title":2233,"items":2234},"規模別",[2235,2240,2245],{"text":2236,"config":2237},"エンタープライズ",{"href":2238,"dataGaLocation":2102,"dataGaName":2239},"/ja-jp/enterprise/","enterprise",{"text":2241,"config":2242},"スモールビジネス",{"href":2243,"dataGaLocation":2102,"dataGaName":2244},"/ja-jp/small-business/","small business",{"text":2246,"config":2247},"スタートアップ",{"href":2248,"dataGaLocation":2102,"dataGaName":2249},"/ja-jp/solutions/startups/","startups",{"title":2251,"items":2252},"業界",[2253,2258,2263,2268,2273,2278],{"text":2254,"config":2255},"金融サービス",{"href":2256,"dataGaLocation":2102,"dataGaName":2257},"/ja-jp/solutions/finance/","financial services",{"text":2259,"config":2260},"公共部門",{"href":2261,"dataGaLocation":2102,"dataGaName":2262},"/ja-jp/solutions/public-sector/","public sector",{"text":2264,"config":2265},"通信",{"href":2266,"dataGaLocation":2102,"dataGaName":2267},"/ja-jp/solutions/telecommunications/","telecommunications",{"text":2269,"config":2270},"自動車",{"href":2271,"dataGaLocation":2102,"dataGaName":2272},"/ja-jp/solutions/automotive/","automotive",{"text":2274,"config":2275},"教育",{"href":2276,"dataGaLocation":2102,"dataGaName":2277},"/ja-jp/solutions/education/","education",{"text":2279,"config":2280},"航空宇宙",{"href":2281,"dataGaLocation":2102,"dataGaName":2282},"/ja-jp/solutions/aerospace/","aerospace",{"config":2284,"title":2285,"text":2286,"link":2287},{"background":2196,"textColor":2197},"GitLabのセキュリティ標準","セキュリティを犠牲にすることなく、ソフトウェアファクトリーを強化し、自律的なAIエージェントを実現する方法をご覧ください。",{"text":2288,"config":2289},"標準を見る",{"href":2290,"dataGaName":2291,"dataGaLocation":2102},"/ja-jp/gitlab-security-standard/","gitlab security standard",{"text":2293,"config":2294},"価格",{"href":2295,"dataGaName":2296,"dataGaLocation":2102,"dataNavLevelOne":2296},"/ja-jp/pricing/","pricing",{"text":2298,"config":2299,"menu":2301},"関連リソース",{"dataNavLevelOne":2300},"resources",{"type":2124,"link":2302,"columns":2306,"feature":2362},{"text":2303,"config":2304},"すべてのリソースを表示",{"href":2305,"dataGaName":2300,"dataGaLocation":2102},"/ja-jp/resources/",[2307,2335],{"title":2308,"items":2309},"検索する",[2310,2315,2320,2325,2330],{"text":2311,"config":2312},"製品ドキュメント",{"href":2313,"dataGaName":2314,"dataGaLocation":2102},"https://docs.gitlab.com/ja-jp/","docs",{"text":2316,"config":2317},"GitLab University",{"href":2318,"dataGaName":2319,"dataGaLocation":2102},"https://university.gitlab.com/","university",{"text":2321,"config":2322},"技術デモ",{"href":2323,"dataGaName":2324,"dataGaLocation":2102},"/ja-jp/gitlab-technical-demo-series/","demo series",{"text":2326,"config":2327},"インタラクティブデモ",{"href":2328,"dataGaName":2329,"dataGaLocation":2102},"/ja-jp/demo-hub/","demo hub",{"text":2331,"config":2332},"GitLabサービス",{"href":2333,"dataGaName":2334,"dataGaLocation":2102},"/ja-jp/services/","services",{"title":2336,"items":2337},"つなげる",[2338,2343,2347,2352,2357],{"text":2339,"config":2340},"ブログ",{"href":2341,"dataGaName":2342,"dataGaLocation":2102},"/ja-jp/blog/","blog",{"text":2344,"config":2345},"コミュニティ",{"href":2346,"dataGaName":2093,"dataGaLocation":2102},"/community/",{"text":2348,"config":2349},"お客様事例",{"href":2350,"dataGaName":2351,"dataGaLocation":2102},"/ja-jp/customers/","customers",{"text":2353,"config":2354},"パートナー",{"href":2355,"dataGaName":2356,"dataGaLocation":2102},"/ja-jp/partners/","partners",{"text":2358,"config":2359},"イベント",{"href":2360,"dataGaName":2361,"dataGaLocation":2102},"/events/","events",{"config":2363,"title":2364,"text":2365,"link":2366},{"background":2196,"textColor":2197},"GitLabの最新情報","最新の機能と改善点に関する情報をお届けします。",{"text":2367,"config":2368},"最新情報を読む",{"href":2369,"dataGaName":2370,"dataGaLocation":2102},"/ja-jp/whats-new/","whats new",{"text":2372,"config":2373,"menu":2375},"企業情報",{"dataNavLevelOne":2374},"company",{"type":2124,"columns":2376},[2377],{"items":2378},[2379,2384,2390,2395,2400,2405,2410,2415,2420],{"text":2380,"config":2381},"GitLabについて",{"href":2382,"dataGaName":2383,"dataGaLocation":2102},"/ja-jp/company/","about",{"text":2385,"config":2386,"footerGa":2389},"採用情報",{"href":2387,"dataGaName":2388,"dataGaLocation":2102},"/jobs/","jobs",{"dataGaName":2388},{"text":2391,"config":2392},"プレス",{"href":2393,"dataGaName":2394,"dataGaLocation":2102},"/press/","press",{"text":2396,"config":2397},"ハンドブック",{"href":2398,"dataGaName":2399,"dataGaLocation":2102},"https://handbook.gitlab.com/","handbook",{"text":2401,"config":2402},"経営陣",{"href":2403,"dataGaName":2404,"dataGaLocation":2102},"/company/team/e-group/","leadership",{"text":2406,"config":2407},"投資家向け情報",{"href":2408,"dataGaName":2409,"dataGaLocation":2102},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":2411,"config":2412},"トラストセンター",{"href":2413,"dataGaName":2414,"dataGaLocation":2102},"/ja-jp/security/","trust center",{"text":2416,"config":2417},"AI Transparency Center",{"href":2418,"dataGaName":2419,"dataGaLocation":2102},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":2421,"config":2422},"ニュースレター",{"href":2423,"dataGaName":2424,"dataGaLocation":2102},"/company/contact/#contact-forms","newsletter",{"text":2426,"config":2427,"menu":2428},"お問い合わせ",{"dataNavLevelOne":2374},{"type":2124,"columns":2429},[2430],{"items":2431},[2432,2437,2442],{"text":2433,"config":2434},"お問い合わせはこちら",{"href":2435,"dataGaName":2436,"dataGaLocation":2102},"/ja-jp/sales/","talk to sales",{"text":2438,"config":2439},"サポートポータル",{"href":2440,"dataGaName":2441,"dataGaLocation":2102},"https://support.gitlab.com/hc/en-us","support portal",{"text":2443,"config":2444},"カスタマーポータル",{"href":2445,"dataGaName":2446,"dataGaLocation":2102},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":2448,"login":2449,"suggestions":2456},"閉じる",{"text":2450,"link":2451},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":2452,"config":2453},"GitLab.com",{"href":2116,"dataGaName":2454,"dataGaLocation":2455},"search login","search",{"text":2457,"default":2458},"提案",[2459,2462,2466,2468,2472,2476],{"text":2460,"config":2461},"GitLab Duo Agent Platform",{"href":2182,"dataGaName":2460,"dataGaLocation":2455},{"text":2463,"config":2464},"コード提案（AI）",{"href":2182,"dataGaName":2465,"dataGaLocation":2455},"Code Suggestions (AI)",{"text":2134,"config":2467},{"href":2136,"dataGaName":2134,"dataGaLocation":2455},{"text":2469,"config":2470},"GitLab on AWS",{"href":2471,"dataGaName":2469,"dataGaLocation":2455},"/ja-jp/partners/technology-partners/aws/",{"text":2473,"config":2474},"GitLab on Google Cloud",{"href":2475,"dataGaName":2473,"dataGaLocation":2455},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":2477,"config":2478},"GitLabを選ぶ理由",{"href":2202,"dataGaName":2479,"dataGaLocation":2455},"Why GitLab?",{"freeTrial":2481,"mobileIcon":2485,"desktopIcon":2490,"secondaryButton":2493},{"text":2104,"config":2482},{"href":2483,"dataGaName":2107,"dataGaLocation":2484},"https://gitlab.com/-/trials/new/","nav",{"altText":2486,"config":2487},"GitLabアイコン",{"src":2488,"dataGaName":2489,"dataGaLocation":2484},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":2486,"config":2491},{"src":2492,"dataGaName":2489,"dataGaLocation":2484},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":2494,"config":2495},"はじめに",{"href":2496,"dataGaName":2497,"dataGaLocation":2484},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp/get-started/","get started",{"freeTrial":2499,"mobileIcon":2503,"desktopIcon":2505},{"text":2500,"config":2501},"GitLab Duoの詳細はこちら",{"href":2182,"dataGaName":2502,"dataGaLocation":2484},"gitlab duo",{"altText":2486,"config":2504},{"src":2488,"dataGaName":2489,"dataGaLocation":2484},{"altText":2486,"config":2506},{"src":2492,"dataGaName":2489,"dataGaLocation":2484},{"button":2508,"mobileIcon":2513,"desktopIcon":2515},{"text":2509,"config":2510},"/switch",{"href":2511,"dataGaName":2512,"dataGaLocation":2484},"#contact","switch",{"altText":2486,"config":2514},{"src":2488,"dataGaName":2489,"dataGaLocation":2484},{"altText":2486,"config":2516},{"src":2517,"dataGaName":2489,"dataGaLocation":2484},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":2519,"mobileIcon":2524,"desktopIcon":2526},{"text":2520,"config":2521},"料金ページに戻る",{"href":2295,"dataGaName":2522,"dataGaLocation":2484,"icon":2523},"back to pricing","GoBack",{"altText":2486,"config":2525},{"src":2488,"dataGaName":2489,"dataGaLocation":2484},{"altText":2486,"config":2527},{"src":2492,"dataGaName":2489,"dataGaLocation":2484},{"title":2529,"titleMobile":2530,"button":2531,"config":2534},"GitLab Orbitが登場: AIエージェントのためのコンテキストレイヤー","GitLab Orbitが登場",{"text":2040,"config":2532},{"href":2187,"dataGaName":2533,"dataGaLocation":2102},"orbit",{"layout":2535,"disabled":2080},"release",{"data":2537},{"text":2538,"source":2539,"edit":2545,"contribute":2550,"config":2555,"items":2560,"minimal":2782},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":2540,"config":2541},"ページのソースを表示",{"href":2542,"dataGaName":2543,"dataGaLocation":2544},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":2546,"config":2547},"このページを編集",{"href":2548,"dataGaName":2549,"dataGaLocation":2544},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":2551,"config":2552},"ご協力をお願いします",{"href":2553,"dataGaName":2554,"dataGaLocation":2544},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":2556,"facebook":2557,"youtube":2558,"linkedin":2559},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[2561,2607,2664,2706,2749],{"title":2293,"links":2562,"subMenu":2577},[2563,2567,2572],{"text":2564,"config":2565},"プランの表示",{"href":2295,"dataGaName":2566,"dataGaLocation":2544},"view plans",{"text":2568,"config":2569},"Premiumを選ぶ理由",{"href":2570,"dataGaName":2571,"dataGaLocation":2544},"/ja-jp/pricing/premium/","why premium",{"text":2573,"config":2574},"Ultimateを選ぶ理由",{"href":2575,"dataGaName":2576,"dataGaLocation":2544},"/ja-jp/pricing/ultimate/","why ultimate",[2578],{"title":2426,"links":2579},[2580,2583,2585,2587,2592,2597,2602],{"text":2581,"config":2582},"営業担当へのお問い合わせ",{"href":2435,"dataGaName":2112,"dataGaLocation":2544},{"text":2438,"config":2584},{"href":2440,"dataGaName":2441,"dataGaLocation":2544},{"text":2443,"config":2586},{"href":2445,"dataGaName":2446,"dataGaLocation":2544},{"text":2588,"config":2589},"ステータス",{"href":2590,"dataGaName":2591,"dataGaLocation":2544},"https://status.gitlab.com/","status",{"text":2593,"config":2594},"利用規約",{"href":2595,"dataGaName":2596,"dataGaLocation":2544},"/terms/","terms of use",{"text":2598,"config":2599},"プライバシーに関する声明",{"href":2600,"dataGaName":2601,"dataGaLocation":2544},"/ja-jp/privacy/","privacy statement",{"text":2603,"config":2604},"Cookie設定",{"dataGaName":2605,"dataGaLocation":2544,"id":2606,"isOneTrustButton":436},"cookie preferences","ot-sdk-btn",{"title":2120,"links":2608,"subMenu":2621},[2609,2611,2613,2615,2617,2619],{"text":2126,"config":2610},{"href":2128,"dataGaName":2122,"dataGaLocation":2544},{"text":2180,"config":2612},{"href":2182,"dataGaName":2183,"dataGaLocation":2544},{"text":2134,"config":2614},{"href":2136,"dataGaName":2137,"dataGaLocation":2544},{"text":2185,"config":2616},{"href":2187,"dataGaName":2188,"dataGaLocation":2544},{"text":2167,"config":2618},{"href":2169,"dataGaName":2170,"dataGaLocation":2544},{"text":2198,"config":2620},{"href":2202,"dataGaName":2203,"dataGaLocation":2544},[2622],{"title":2623,"links":2624},"トピック",[2625,2629,2634,2639,2644,2649,2654,2659],{"text":2134,"config":2626},{"href":2627,"dataGaName":2628,"dataGaLocation":2544},"/ja-jp/topics/ci-cd/","cicd",{"text":2630,"config":2631},"GitOps",{"href":2632,"dataGaName":2633,"dataGaLocation":2544},"/ja-jp/topics/gitops/","gitops",{"text":2635,"config":2636},"DevOps",{"href":2637,"dataGaName":2638,"dataGaLocation":2544},"/ja-jp/topics/devops/","devops",{"text":2640,"config":2641},"バージョン管理",{"href":2642,"dataGaName":2643,"dataGaLocation":2544},"/ja-jp/topics/version-control/","version control",{"text":2645,"config":2646},"DevSecOps",{"href":2647,"dataGaName":2648,"dataGaLocation":2544},"/ja-jp/topics/devsecops/","devsecops",{"text":2650,"config":2651},"クラウドネイティブ",{"href":2652,"dataGaName":2653,"dataGaLocation":2544},"/ja-jp/topics/cloud-native/","cloud native",{"text":2655,"config":2656},"コーディングのためのAI",{"href":2657,"dataGaName":2658,"dataGaLocation":2544},"/ja-jp/topics/devops/ai-for-coding/","ai for coding",{"text":2660,"config":2661},"エージェント型AI",{"href":2662,"dataGaName":2663,"dataGaLocation":2544},"/ja-jp/topics/agentic-ai/","agentic ai",{"title":2205,"links":2665},[2666,2668,2670,2672,2674,2677,2679,2681,2683,2685,2687,2689,2691,2694,2698,2702],{"text":2218,"config":2667},{"href":2220,"dataGaName":2221,"dataGaLocation":2544},{"text":2223,"config":2669},{"href":2225,"dataGaName":2226,"dataGaLocation":2544},{"text":2228,"config":2671},{"href":2230,"dataGaName":2231,"dataGaLocation":2544},{"text":2254,"config":2673},{"href":2256,"dataGaName":2257,"dataGaLocation":2544},{"text":2675,"config":2676},"公共機関",{"href":2261,"dataGaName":2262,"dataGaLocation":2544},{"text":2264,"config":2678},{"href":2266,"dataGaName":2267,"dataGaLocation":2544},{"text":2269,"config":2680},{"href":2271,"dataGaName":2272,"dataGaLocation":2544},{"text":2274,"config":2682},{"href":2276,"dataGaName":2277,"dataGaLocation":2544},{"text":2279,"config":2684},{"href":2281,"dataGaName":2282,"dataGaLocation":2544},{"text":2236,"config":2686},{"href":2238,"dataGaName":2239,"dataGaLocation":2544},{"text":2241,"config":2688},{"href":2243,"dataGaName":2244,"dataGaLocation":2544},{"text":2246,"config":2690},{"href":2248,"dataGaName":2249,"dataGaLocation":2544},{"text":2630,"config":2692},{"href":2693,"dataGaName":2633,"dataGaLocation":2544},"/ja-jp/solutions/gitops/",{"text":2695,"config":2696},"ソフトウェアコンポジション解析",{"href":2174,"dataGaName":2697,"dataGaLocation":2544},"software composition analysis",{"text":2699,"config":2700},"バリューストリーム管理",{"href":2192,"dataGaName":2701,"dataGaLocation":2544},"value stream management",{"text":2703,"config":2704},"すべてのソリューション",{"href":2212,"dataGaName":2705,"dataGaLocation":2544},"all solutions",{"title":2707,"links":2708},"リソース",[2709,2714,2719,2722,2724,2726,2728,2730,2732,2734,2736,2738,2740,2742,2745],{"text":2710,"config":2711},"インストール",{"href":2712,"dataGaName":2713,"dataGaLocation":2544},"/ja-jp/install/","install",{"text":2715,"config":2716},"クイックスタートガイド",{"href":2717,"dataGaName":2718,"dataGaLocation":2544},"/ja-jp/get-started/","quick setup checklists",{"text":2311,"config":2720},{"href":2721,"dataGaName":2314,"dataGaLocation":2544},"https://docs.gitlab.com/ja-jp",{"text":2316,"config":2723},{"href":2318,"dataGaName":2319,"dataGaLocation":2544},{"text":2321,"config":2725},{"href":2323,"dataGaName":2324,"dataGaLocation":2544},{"text":2326,"config":2727},{"href":2328,"dataGaName":2329,"dataGaLocation":2544},{"text":2331,"config":2729},{"href":2333,"dataGaName":2334,"dataGaLocation":2544},{"text":2339,"config":2731},{"href":2341,"dataGaName":2342,"dataGaLocation":2544},{"text":2344,"config":2733},{"href":2346,"dataGaName":2093,"dataGaLocation":2544},{"text":2348,"config":2735},{"href":2350,"dataGaName":2351,"dataGaLocation":2544},{"text":2353,"config":2737},{"href":2355,"dataGaName":2356,"dataGaLocation":2544},{"text":2358,"config":2739},{"href":2360,"dataGaName":2361,"dataGaLocation":2544},{"text":2421,"config":2741},{"href":2423,"dataGaName":2424,"dataGaLocation":2544},{"text":2743,"config":2744},"最新リリース",{"href":2369,"dataGaName":2370,"dataGaLocation":2544},{"text":2746,"config":2747},"すべてのリソース",{"href":2305,"dataGaName":2748,"dataGaLocation":2544},"all resources",{"title":2750,"links":2751},"会社情報",[2752,2754,2756,2758,2760,2762,2764,2766,2768,2772,2777],{"text":2380,"config":2753},{"href":2382,"dataGaName":2374,"dataGaLocation":2544},{"text":2385,"config":2755},{"href":2387,"dataGaName":2388,"dataGaLocation":2544},{"text":2391,"config":2757},{"href":2393,"dataGaName":2394,"dataGaLocation":2544},{"text":2396,"config":2759},{"href":2398,"dataGaName":2399,"dataGaLocation":2544},{"text":2401,"config":2761},{"href":2403,"dataGaName":2404,"dataGaLocation":2544},{"text":2406,"config":2763},{"href":2408,"dataGaName":2409,"dataGaLocation":2544},{"text":2411,"config":2765},{"href":2413,"dataGaName":2414,"dataGaLocation":2544},{"text":2416,"config":2767},{"href":2418,"dataGaName":2419,"dataGaLocation":2544},{"text":2769,"config":2770},"Sustainability",{"href":2771,"dataGaName":2769,"dataGaLocation":2544},"/sustainability/",{"text":2773,"config":2774},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":2775,"dataGaName":2776,"dataGaLocation":2544},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":2778,"config":2779},"現代奴隷制の透明性に関する声明",{"href":2780,"dataGaName":2781,"dataGaLocation":2544},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":2783},[2784,2786,2788],{"text":2593,"config":2785},{"href":2595,"dataGaName":2596,"dataGaLocation":2544},{"text":2603,"config":2787},{"dataGaName":2605,"dataGaLocation":2544,"id":2606,"isOneTrustButton":436},{"text":2598,"config":2789},{"href":2600,"dataGaName":2601,"dataGaLocation":2544},[2791],{"id":2792,"title":7,"body":2079,"config":2793,"content":2795,"description":2079,"extension":2799,"meta":2800,"navigation":436,"path":2801,"seo":2802,"stem":2803,"__hash__":2804},"blogAuthors/en-us/blog/authors/karthik-nayak.yml",{"template":2794},"BlogAuthor",{"name":7,"config":2796},{"headshot":2797,"ctfId":2798},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659809/Blog/Author%20Headshots/Screenshot_2025-06-04_at_8.49.51%C3%A2__AM.png","3Q6ZKvaiCRw7tFZdDGlecg","yml",{},"/en-us/blog/authors/karthik-nayak",{},"en-us/blog/authors/karthik-nayak","pDQbfmQk6aaJ6PA9L68AzPlzIUBcosTh7WBoq680gpk",[2806,2814,2822],{"title":2807,"description":2808,"heroImage":2809,"category":2075,"date":2810,"authors":2811,"slug":2813,"externalUrl":2079},"GitLab AIハッカソン2026：受賞者発表","約7,000人の開発者がGitLab Duo Agent Platform上で600以上のAIエージェントとフローを構築したハッカソンの結果をご紹介。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1776457632/llddiylsgwuze0u1rjks.png","2026-04-22",[2812],"Nick Veenhof","gitlab-ai-hackathon-2026-meet-the-winners",{"title":2815,"description":2816,"heroImage":2817,"category":2075,"date":2818,"authors":2819,"slug":2821,"externalUrl":2079},"git mergeコマンドの基本を徹底解説","この記事では、git mergeコマンドについてコマンドの基本的な使い方からリクエストコードまで解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1754287290/averr2ecwl01q2f9lknf.jpg","2025-08-04",[2820],"GitLab Team","git-merge-command-overview",{"title":2823,"description":2824,"heroImage":2825,"category":2075,"date":2826,"authors":2827,"slug":2828,"externalUrl":2079},"オープンソースソフトウェア（OSS）とは？詳しく解説​","オープンソースの意味や、メリットとデメリットについて、分かりやすく解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1752720740/g9x8oi988xuhioglpczi.jpg","2025-07-17",[2820],"what-is-open-source",{"header":2830,"text":2831,"button":2835,"disclaimer":2838},"無料の\n\n30日間のGitLabトライアルを開始\n",[2832,2833,2834],"GitLab Duo Agent Platformへのアクセス","GitLabの最も高度な機能を試す","AIで複雑なタスクを自動化する",{"text":2104,"config":2836},{"href":2837,"dataGaName":2107,"dataGaLocation":2342},"https://gitlab.com/-/trials/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/ja-jp/blog/","クレジットカードなしでご登録いただけます。",{"header":2840,"blurb":2841,"button":2842,"secondaryButton":2845},"今すぐ開発をスピードアップ","DevSecOpsに特化したインテリジェントオーケストレーションプラットフォームで実現できることをご確認ください。\n",{"text":2104,"config":2843},{"href":2844,"dataGaName":2107,"dataGaLocation":1599},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/ja-jp/",{"text":2426,"config":2846},{"href":2435,"dataGaName":2112,"dataGaLocation":1599},1791944960968]