คุณโหลดฟังก์ชันต่อไปนี้ได้จาก
@bazel_tools//tools/build_defs/repo:git.bzl
กฎสำหรับการโคลนที่เก็บ Git ภายนอก
git_repository
load("@bazel//tools/build_defs/repo:git.bzl", "git_repository")
git_repository(name, branch, build_file, build_file_content, commit, init_submodules, patch_args,
               patch_cmds, patch_cmds_win, patch_strip, patch_tool, patches,
               recursive_init_submodules, remote, repo_mapping, shallow_since, sparse_checkout_file,
               sparse_checkout_patterns, strip_prefix, tag, verbose, workspace_file,
               workspace_file_content)
โคลนที่เก็บ Git ภายนอก
โคลนที่เก็บ Git ตรวจสอบแท็กหรือคอมมิตที่ระบุ และ ทำให้เป้าหมายพร้อมสำหรับการเชื่อมโยง นอกจากนี้ ให้ระบุรหัสของ คอมมิตที่เช็คเอาต์จริงและวันที่ของคอมมิตนั้น แล้วส่งคืนพจนานุกรมที่มีพารามิเตอร์ ซึ่งระบุเวอร์ชันที่ทำซ้ำได้ของกฎนี้ (ซึ่งแท็กไม่จำเป็นต้อง เป็นเช่นนั้น)
Bazel จะพยายามดึงข้อมูลแบบตื้นๆ เฉพาะคอมมิตที่ระบุก่อน หากไม่สำเร็จ (มักเกิดจากการที่เซิร์ฟเวอร์ไม่รองรับ) ระบบจะกลับไปใช้ การดึงข้อมูลที่เก็บแบบเต็ม
ต้องการ http_archive มากกว่า git_repository
สาเหตุมีดังนี้
- กฎที่เก็บ Git ขึ้นอยู่กับระบบ git(1)ในขณะที่โปรแกรมดาวน์โหลด HTTP สร้างขึ้นใน Bazel และไม่มีการขึ้นต่อกันของระบบ
- http_archiveรองรับรายการ- urlsเป็นมิเรอร์ และ- git_repositoryรองรับเฉพาะ- remoteเดียว
- http_archiveใช้ได้กับแคชที่เก็บ แต่ใช้ไม่ได้กับ- git_repositoryดูข้อมูลเพิ่มเติมได้ที่ #5116
แอตทริบิวต์
| name | ชื่อ (ต้องระบุ) ชื่อที่ไม่ซ้ำกันสำหรับที่เก็บนี้ | 
| branch | สตริง ไม่บังคับ ในที่เก็บระยะไกลที่จะเช็คเอาต์ ต้องระบุสาขา แท็ก หรือคอมมิตอย่างใดอย่างหนึ่งที่แน่นอน | 
| build_file | ป้ายกำกับ (ไม่บังคับ) ไฟล์ที่จะใช้เป็นไฟล์ BUILD สำหรับที่เก็บนี้ แอตทริบิวต์นี้คือป้ายกำกับแบบสัมบูรณ์ (ใช้ "@//" สำหรับที่เก็บหลัก) ไฟล์ไม่จำเป็นต้องชื่อ BUILD แต่สามารถตั้งชื่อได้ (เช่น BUILD.new-repo-name อาจใช้ได้ดีในการแยกความแตกต่างจากไฟล์ BUILD จริงของที่เก็บ | 
| build_file_content | สตริง ไม่บังคับ เนื้อหาสำหรับไฟล์ BUILD สำหรับที่เก็บนี้ | 
| commit | สตริง ไม่บังคับ คอมมิตที่เฉพาะเจาะจงที่จะเช็คเอาต์ ต้องระบุสาขา แท็ก หรือคอมมิตอย่างใดอย่างหนึ่งที่แน่นอน | 
| init_submodules | บูลีน ไม่บังคับ ว่าจะโคลนโมดูลย่อยในที่เก็บหรือไม่ | 
| patch_args | รายการสตริง ไม่บังคับ อาร์กิวเมนต์ที่ส่งไปยังเครื่องมือแพตช์ ค่าเริ่มต้นคือ -p0 (ดูแอตทริบิวต์ `patch_strip`) แต่โดยปกติแล้วจะต้องใช้ -p1 สำหรับแพตช์ที่สร้างโดย Git หากระบุอาร์กิวเมนต์ -p หลายรายการ อาร์กิวเมนต์สุดท้ายจะมีผล หากระบุอาร์กิวเมนต์อื่นที่ไม่ใช่ -p Bazel จะกลับไปใช้เครื่องมือบรรทัดคำสั่ง patch แทนการติดตั้งใช้งานแพตช์ดั้งเดิมของ Bazel เมื่อเปลี่ยนไปใช้เครื่องมือบรรทัดคำสั่ง patch และไม่ได้ระบุแอตทริบิวต์ patch_tool ระบบจะใช้ `patch` | 
| patch_cmds | รายการสตริง ไม่บังคับ ลำดับคำสั่ง Bash ที่จะใช้ใน Linux/Macos หลังจากใช้แพตช์แล้ว | 
| patch_cmds_win | รายการสตริง ไม่บังคับ ลำดับคำสั่ง PowerShell ที่จะใช้ใน Windows หลังจากใช้แพตช์ หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ ระบบจะเรียกใช้ patch_cmds ใน Windows ซึ่งต้องมีไบนารี Bash | 
| patch_strip | จำนวนเต็ม ไม่บังคับ เมื่อตั้งค่าเป็น `N` จะเทียบเท่ากับการแทรก `-pN` ที่จุดเริ่มต้นของ `patch_args` | 
| patch_tool | สตริง ไม่บังคับ โปรแกรมอรรถประโยชน์ patch(1) ที่จะใช้ หากมีการระบุ Bazel จะใช้เครื่องมือแก้ไขที่ระบุแทนการติดตั้งใช้งานแพตช์ดั้งเดิมของ Bazel | 
| patches | รายการป้ายกำกับ (ไม่บังคับ) รายการไฟล์ที่จะใช้เป็นแพตช์หลังจากแตกไฟล์ที่เก็บถาวร โดยค่าเริ่มต้นจะใช้การติดตั้งใช้งานแพตช์ดั้งเดิมของ Bazel ซึ่งไม่รองรับการจับคู่แบบคลุมเครือและแพตช์ไบนารี แต่ Bazel จะกลับไปใช้เครื่องมือบรรทัดคำสั่ง patch หากมีการระบุแอตทริบิวต์ `patch_tool` หรือมีอาร์กิวเมนต์อื่นนอกเหนือจาก `-p` ในแอตทริบิวต์ `patch_args` | 
| recursive_init_submodules | บูลีน ไม่บังคับ ว่าจะโคลนโมดูลย่อยแบบเรียกซ้ำในที่เก็บหรือไม่ | 
| remote | สตริง; ต้องระบุ URI ของที่เก็บ Git ระยะไกล | 
| repo_mapping | พจนานุกรม: สตริง -> สตริง; ไม่บังคับ ในบริบท `WORKSPACE` เท่านั้น: พจนานุกรมจากชื่อที่เก็บในเครื่องไปยังชื่อที่เก็บส่วนกลาง ซึ่งจะช่วยให้ควบคุมการแก้ปัญหาการขึ้นต่อกันของเวิร์กสเปซสำหรับการขึ้นต่อกันของที่เก็บนี้ได้ ตัวอย่างเช่น รายการ `"@foo": "@bar"` จะประกาศว่าเมื่อใดก็ตามที่ที่เก็บนี้ขึ้นอยู่กับ `@foo` (เช่น การขึ้นอยู่กับ `@foo//some:target`) ที่เก็บนี้ควรแก้ปัญหาการขึ้นอยู่ดังกล่าวภายใน `@bar` ที่ประกาศทั่วโลก (`@bar//some:target`) ระบบ _ไม่_ รองรับแอตทริบิวต์นี้ในบริบท `MODULE.bazel` (เมื่อเรียกใช้กฎที่เก็บภายในฟังก์ชันการใช้งานของส่วนขยายโมดูล) | 
| shallow_since | สตริง ไม่บังคับ วันที่ที่ไม่บังคับ โดยต้องไม่ใช่วันที่หลังจากคอมมิตที่ระบุ ไม่อนุญาตให้ใช้อาร์กิวเมนต์หากมีการระบุแท็กหรือกิ่ง (ซึ่งโคลนได้เสมอด้วย --depth=1) การตั้งค่าวันที่ดังกล่าวใกล้กับคอมมิตที่ระบุอาจอนุญาตให้โคลนแบบตื้นของที่เก็บได้แม้ว่าเซิร์ฟเวอร์จะไม่รองรับการดึงข้อมูลแบบตื้นของคอมมิตที่กำหนดเองก็ตาม เนื่องจากมีข้อบกพร่องในการติดตั้งใช้งาน --shallow-since ของ Git เราจึงไม่แนะนำให้ใช้แอตทริบิวต์นี้เนื่องจากอาจทำให้การดึงข้อมูลล้มเหลว | 
| sparse_checkout_file | ป้ายกำกับ (ไม่บังคับ) ไฟล์ที่มีรูปแบบสไตล์ .gitignore สำหรับการชำระเงินแบบกระจายของไฟล์ในที่เก็บนี้ คุณระบุ `sparse_checkout_patterns` หรือ `sparse_checkout_file` อย่างใดอย่างหนึ่ง หรือไม่ระบุทั้ง 2 อย่างก็ได้ แต่จะระบุทั้ง 2 อย่างไม่ได้ | 
| sparse_checkout_patterns | รายการสตริง ไม่บังคับ ลำดับของรูปแบบสำหรับการชำระเงินแบบกระจายของไฟล์ในที่เก็บนี้ | 
| strip_prefix | สตริง ไม่บังคับ คำนำหน้าไดเรกทอรีที่จะนำออกจากไฟล์ที่แยก | 
| tag | สตริง ไม่บังคับ ในที่เก็บระยะไกลเพื่อเช็คเอาต์ ต้องระบุสาขา แท็ก หรือคอมมิตอย่างใดอย่างหนึ่งที่แน่นอน | 
| verbose | บูลีน ไม่บังคับ | 
| workspace_file | ป้ายกำกับ (ไม่บังคับ) ไฟล์ที่จะใช้เป็นไฟล์ `WORKSPACE` สำหรับที่เก็บนี้ คุณระบุ `workspace_file` หรือ `workspace_file_content` อย่างใดอย่างหนึ่ง หรือไม่ระบุทั้ง 2 อย่างก็ได้ แต่จะระบุทั้ง 2 อย่างไม่ได้ | 
| workspace_file_content | สตริง ไม่บังคับ เนื้อหาสำหรับไฟล์ WORKSPACE ของที่เก็บนี้ คุณระบุ `workspace_file` หรือ `workspace_file_content` อย่างใดอย่างหนึ่ง หรือไม่ระบุทั้ง 2 อย่างก็ได้ แต่จะระบุทั้ง 2 อย่างไม่ได้ | 
new_git_repository
load("@bazel//tools/build_defs/repo:git.bzl", "new_git_repository")
new_git_repository(name, branch, build_file, build_file_content, commit, init_submodules,
                   patch_args, patch_cmds, patch_cmds_win, patch_strip, patch_tool, patches,
                   recursive_init_submodules, remote, repo_mapping, shallow_since,
                   sparse_checkout_file, sparse_checkout_patterns, strip_prefix, tag, verbose,
                   workspace_file, workspace_file_content)
โคลนที่เก็บ Git ภายนอก
โคลนที่เก็บ Git ตรวจสอบแท็กหรือคอมมิตที่ระบุ และ ทำให้เป้าหมายพร้อมสำหรับการเชื่อมโยง นอกจากนี้ ให้ระบุรหัสของ คอมมิตที่เช็คเอาต์จริงและวันที่ของคอมมิตนั้น แล้วส่งคืนพจนานุกรมที่มีพารามิเตอร์ ซึ่งระบุเวอร์ชันที่ทำซ้ำได้ของกฎนี้ (ซึ่งแท็กไม่จำเป็นต้อง เป็นเช่นนั้น)
Bazel จะพยายามดึงข้อมูลแบบตื้นๆ เฉพาะคอมมิตที่ระบุก่อน หากไม่สำเร็จ (มักเกิดจากการที่เซิร์ฟเวอร์ไม่รองรับ) ระบบจะกลับไปใช้ การดึงข้อมูลที่เก็บแบบเต็ม
ต้องการ http_archive มากกว่า git_repository
สาเหตุมีดังนี้
- กฎที่เก็บ Git ขึ้นอยู่กับระบบ git(1)ในขณะที่โปรแกรมดาวน์โหลด HTTP สร้างขึ้นใน Bazel และไม่มีการขึ้นต่อกันของระบบ
- http_archiveรองรับรายการ- urlsเป็นมิเรอร์ และ- git_repositoryรองรับเฉพาะ- remoteเดียว
- http_archiveใช้ได้กับแคชที่เก็บ แต่ใช้ไม่ได้กับ- git_repositoryดูข้อมูลเพิ่มเติมได้ที่ #5116
แอตทริบิวต์
| name | ชื่อ (ต้องระบุ) ชื่อที่ไม่ซ้ำกันสำหรับที่เก็บนี้ | 
| branch | สตริง ไม่บังคับ ในที่เก็บระยะไกลที่จะเช็คเอาต์ ต้องระบุสาขา แท็ก หรือคอมมิตอย่างใดอย่างหนึ่งที่แน่นอน | 
| build_file | ป้ายกำกับ (ไม่บังคับ) ไฟล์ที่จะใช้เป็นไฟล์ BUILD สำหรับที่เก็บนี้ แอตทริบิวต์นี้คือป้ายกำกับแบบสัมบูรณ์ (ใช้ "@//" สำหรับที่เก็บหลัก) ไฟล์ไม่จำเป็นต้องชื่อ BUILD แต่สามารถตั้งชื่อได้ (เช่น BUILD.new-repo-name อาจใช้ได้ดีในการแยกความแตกต่างจากไฟล์ BUILD จริงของที่เก็บ | 
| build_file_content | สตริง ไม่บังคับ เนื้อหาสำหรับไฟล์ BUILD สำหรับที่เก็บนี้ | 
| commit | สตริง ไม่บังคับ คอมมิตที่เฉพาะเจาะจงที่จะเช็คเอาต์ ต้องระบุสาขา แท็ก หรือคอมมิตอย่างใดอย่างหนึ่งที่แน่นอน | 
| init_submodules | บูลีน ไม่บังคับ ว่าจะโคลนโมดูลย่อยในที่เก็บหรือไม่ | 
| patch_args | รายการสตริง ไม่บังคับ อาร์กิวเมนต์ที่ส่งไปยังเครื่องมือแพตช์ ค่าเริ่มต้นคือ -p0 (ดูแอตทริบิวต์ `patch_strip`) แต่โดยปกติแล้วจะต้องใช้ -p1 สำหรับแพตช์ที่สร้างโดย Git หากระบุอาร์กิวเมนต์ -p หลายรายการ อาร์กิวเมนต์สุดท้ายจะมีผล หากระบุอาร์กิวเมนต์อื่นที่ไม่ใช่ -p Bazel จะกลับไปใช้เครื่องมือบรรทัดคำสั่ง patch แทนการติดตั้งใช้งานแพตช์ดั้งเดิมของ Bazel เมื่อเปลี่ยนไปใช้เครื่องมือบรรทัดคำสั่ง patch และไม่ได้ระบุแอตทริบิวต์ patch_tool ระบบจะใช้ `patch` | 
| patch_cmds | รายการสตริง ไม่บังคับ ลำดับคำสั่ง Bash ที่จะใช้ใน Linux/Macos หลังจากใช้แพตช์แล้ว | 
| patch_cmds_win | รายการสตริง ไม่บังคับ ลำดับคำสั่ง PowerShell ที่จะใช้ใน Windows หลังจากใช้แพตช์ หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ ระบบจะเรียกใช้ patch_cmds ใน Windows ซึ่งต้องมีไบนารี Bash | 
| patch_strip | จำนวนเต็ม ไม่บังคับ เมื่อตั้งค่าเป็น `N` จะเทียบเท่ากับการแทรก `-pN` ที่จุดเริ่มต้นของ `patch_args` | 
| patch_tool | สตริง ไม่บังคับ โปรแกรมอรรถประโยชน์ patch(1) ที่จะใช้ หากมีการระบุ Bazel จะใช้เครื่องมือแก้ไขที่ระบุแทนการติดตั้งใช้งานแพตช์ดั้งเดิมของ Bazel | 
| patches | รายการป้ายกำกับ (ไม่บังคับ) รายการไฟล์ที่จะใช้เป็นแพตช์หลังจากแตกไฟล์ที่เก็บถาวร โดยค่าเริ่มต้นจะใช้การติดตั้งใช้งานแพตช์ดั้งเดิมของ Bazel ซึ่งไม่รองรับการจับคู่แบบคลุมเครือและแพตช์ไบนารี แต่ Bazel จะกลับไปใช้เครื่องมือบรรทัดคำสั่ง patch หากมีการระบุแอตทริบิวต์ `patch_tool` หรือมีอาร์กิวเมนต์อื่นนอกเหนือจาก `-p` ในแอตทริบิวต์ `patch_args` | 
| recursive_init_submodules | บูลีน ไม่บังคับ ว่าจะโคลนโมดูลย่อยแบบเรียกซ้ำในที่เก็บหรือไม่ | 
| remote | สตริง; ต้องระบุ URI ของที่เก็บ Git ระยะไกล | 
| repo_mapping | พจนานุกรม: สตริง -> สตริง; ไม่บังคับ ในบริบท `WORKSPACE` เท่านั้น: พจนานุกรมจากชื่อที่เก็บในเครื่องไปยังชื่อที่เก็บส่วนกลาง ซึ่งจะช่วยให้ควบคุมการแก้ปัญหาการขึ้นต่อกันของเวิร์กสเปซสำหรับการขึ้นต่อกันของที่เก็บนี้ได้ ตัวอย่างเช่น รายการ `"@foo": "@bar"` จะประกาศว่าเมื่อใดก็ตามที่ที่เก็บนี้ขึ้นอยู่กับ `@foo` (เช่น การขึ้นอยู่กับ `@foo//some:target`) ที่เก็บนี้ควรแก้ปัญหาการขึ้นอยู่ดังกล่าวภายใน `@bar` ที่ประกาศทั่วโลก (`@bar//some:target`) ระบบ _ไม่_ รองรับแอตทริบิวต์นี้ในบริบท `MODULE.bazel` (เมื่อเรียกใช้กฎที่เก็บภายในฟังก์ชันการใช้งานของส่วนขยายโมดูล) | 
| shallow_since | สตริง ไม่บังคับ วันที่ที่ไม่บังคับ โดยต้องไม่ใช่วันที่หลังจากคอมมิตที่ระบุ ไม่อนุญาตให้ใช้อาร์กิวเมนต์หากมีการระบุแท็กหรือกิ่ง (ซึ่งโคลนได้เสมอด้วย --depth=1) การตั้งค่าวันที่ดังกล่าวใกล้กับคอมมิตที่ระบุอาจอนุญาตให้โคลนแบบตื้นของที่เก็บได้แม้ว่าเซิร์ฟเวอร์จะไม่รองรับการดึงข้อมูลแบบตื้นของคอมมิตที่กำหนดเองก็ตาม เนื่องจากมีข้อบกพร่องในการติดตั้งใช้งาน --shallow-since ของ Git เราจึงไม่แนะนำให้ใช้แอตทริบิวต์นี้เนื่องจากอาจทำให้การดึงข้อมูลล้มเหลว | 
| sparse_checkout_file | ป้ายกำกับ (ไม่บังคับ) ไฟล์ที่มีรูปแบบสไตล์ .gitignore สำหรับการชำระเงินแบบกระจายของไฟล์ในที่เก็บนี้ คุณระบุ `sparse_checkout_patterns` หรือ `sparse_checkout_file` อย่างใดอย่างหนึ่ง หรือไม่ระบุทั้ง 2 อย่างก็ได้ แต่จะระบุทั้ง 2 อย่างไม่ได้ | 
| sparse_checkout_patterns | รายการสตริง ไม่บังคับ ลำดับของรูปแบบสำหรับการชำระเงินแบบกระจายของไฟล์ในที่เก็บนี้ | 
| strip_prefix | สตริง ไม่บังคับ คำนำหน้าไดเรกทอรีที่จะนำออกจากไฟล์ที่แยก | 
| tag | สตริง ไม่บังคับ ในที่เก็บระยะไกลเพื่อเช็คเอาต์ ต้องระบุสาขา แท็ก หรือคอมมิตอย่างใดอย่างหนึ่งที่แน่นอน | 
| verbose | บูลีน ไม่บังคับ | 
| workspace_file | ป้ายกำกับ (ไม่บังคับ) ไฟล์ที่จะใช้เป็นไฟล์ `WORKSPACE` สำหรับที่เก็บนี้ คุณระบุ `workspace_file` หรือ `workspace_file_content` อย่างใดอย่างหนึ่ง หรือไม่ระบุทั้ง 2 อย่างก็ได้ แต่จะระบุทั้ง 2 อย่างไม่ได้ | 
| workspace_file_content | สตริง ไม่บังคับ เนื้อหาสำหรับไฟล์ WORKSPACE ของที่เก็บนี้ คุณระบุ `workspace_file` หรือ `workspace_file_content` อย่างใดอย่างหนึ่ง หรือไม่ระบุทั้ง 2 อย่างก็ได้ แต่จะระบุทั้ง 2 อย่างไม่ได้ |