Làm cách nào để tạo kho lưu trữ Git với tên nhánh mặc định khác với " master
"?
Bạn sẽ sử dụng Git 2.28 (Q3 2020): tên của nhánh chính trong các kho lưu trữ hiện có và tên mặc định được sử dụng cho nhánh đầu tiên trong các kho mới được tạo, có thể định cấu hình, để cuối cùng chúng ta có thể tự cai nghiện mã cứng ' master
'.
Và lời nhắc từ tháng 8 năm 2020 từ GitHub :
Vào ngày 1 tháng 10 năm 2020, nếu bạn chưa thay đổi nhánh mặc định cho các kho lưu trữ mới cho người dùng, tổ chức hoặc doanh nghiệp của mình, nó sẽ tự động thay đổi từ master
thànhmain
.
Bạn có thể chọn không tham gia thay đổi này bất kỳ lúc nào:
- Đối với người dùng, trên trang https://github.com/settings/repositories
- Đối với chủ sở hữu tổ chức, trên
https://github.com/organizations/YOUR-ORGANIZATION/settings/repository-defaults
trang
- Đối với quản trị viên doanh nghiệp, trên
https://github.com/enterprises/YOUR-ENTERPRISE/settings/member_privileges
trang
Thay đổi này là một trong nhiều thay đổi mà GitHub đang thực hiện để hỗ trợ các dự án và người bảo trì muốn đổi tên nhánh mặc định của họ.
Để tìm hiểu thêm về những thay đổi chúng tôi đang thực hiện, hãy xem github / đổi tên .
Nhưng quay lại chính Git: (2.28, Q3 2020) Xem cam kết 508fd8e (29/06/2020) của Đoàn Trần Công Danh ( sgn
) .
Xem cam kết 0068f21 , cam kết a471214 , cam kết 0cc1b47 , cam kết 32ba12d , cam kết 6069ecc , cam kết f0a96e8 , cam kết 4d04658 (24 tháng 6 năm 2020) và cam kết 489947c (23 tháng 6 năm 2020) bởi Johannes Schindelin ( dscho
) .
Xem cam kết 8747ebb (24 tháng 6 năm 2020) của Don Goodman-Wilson ( DEGoodmanWilson
) .
(Hợp nhất bởi Junio C Hamano - gitster
- incam kết 11cbda2 , ngày 06 tháng 7 năm 2020)
init
: cho phép chỉ định tên nhánh ban đầu cho kho lưu trữ mới
Người ký hợp đồng: Johannes Schindelin
Ngày càng có nhiều dự án và công ty muốn thay đổi tên chi nhánh chính của kho lưu trữ của họ (xem ví dụ: tweet của Mislav Marohnić để biết thông tin cơ bản về điều này).
Để thay đổi tên nhánh đó cho các kho lưu trữ mới, hiện tại cách duy nhất để thực hiện điều đó tự động là sao chép tất cả thư mục mẫu của Git, sau đó mã hóa cứng tên nhánh mặc định mong muốn vào .git/HEAD
tệp, rồi định cấu hình init.templateDir
để trỏ đến các tệp mẫu đã sao chép đó.
Để thực hiện quá trình này ít hơn nhiều rườm rà, chúng ta hãy giới thiệu một tùy chọn mới: --initial-branch=<branch-name>
.
git init --initial-branch=hello myLocalRepo
# or
git config --global init.defaultBranch hello
git init myLocalRepo
Và:
init
: cho phép đặt giá trị mặc định cho tên nhánh ban đầu thông qua cấu hình
Người hỗ trợ: Johannes Schindelin Người trợ
giúp: Derrick Stolee
Người ký hợp đồng: Don Goodman-Wilson
Chúng tôi vừa giới thiệu tùy chọn dòng lệnh --initial-branch=<branch-name>
để cho phép khởi tạo một kho lưu trữ mới với một nhánh ban đầu khác với nhánh được mã hóa cứng.
Để cho phép người dùng ghi đè tên nhánh ban đầu lâu dài hơn (nghĩa là không cần phải chỉ định tên theo cách thủ công cho mỗi và mọi lệnh git init
gọi), hãy giới thiệu init.defaultBranch
cài đặt cấu hình.
Lưu ý: commit 489947c , về thông báo hợp nhất, đã được hoàn nguyên trong Git 2.29, hãy xem " làm cách nào để tùy chỉnh thông báo cam kết hợp nhất của git? ".
Các init.defaultBranch
thiết lập vẫn còn.
Điều này ảnh hưởng đến các mô-đun con:
submodule
: quay lại HEAD của điều khiển từ xa vì thiếu điều khiển từ xa..branch
Người hỗ trợ: Philippe Blain
Người ký hợp đồng: Johannes Schindelin
Khi remote.<name>.branch
không được cấu hình, git submodule update
hiện tại quay trở lại việc sử dụng tên nhánh master
.
Tuy nhiên, một ý tưởng tốt hơn nhiều là sử dụng điều khiển từ xa HEAD
: trên tất cả các máy chủ Git đang chạy các phiên bản Git gần đây, symref HEAD
trỏ đến nhánh chính.
Lưu ý: t7419 chứng minh rằng có thể có các trường hợp sử dụng ngoài đó mong git submodule update --remote
muốn cập nhật các mô-đun con cho master
nhánh từ xa ngay cả khi từ xa HEAD
trỏ đến nhánh khác.
Có thể cho rằng, bản vá này làm cho hành vi trực quan hơn, nhưng có một chút khả năng rằng điều này có thể gây ra hồi quy trong các thiết lập khó hiểu.
Mặc dù vậy, sẽ không sao để khắc phục hành vi này mà không cần bất kỳ điều gì giống như thời gian chuyển đổi dài hơn:
- Các
git submodule update --remote
lệnh là không thực sự phổ biến.
- Hành vi của Git hiện tại khi chạy lệnh này hoàn toàn khó hiểu, trừ khi nhánh hiện tại của kho lưu trữ từ xa là
master
(trong trường hợp đó hành vi được đề xuất khớp với hành vi cũ).
- Nếu người dùng gặp phải hồi quy do hành vi đã thay đổi, cách khắc phục thực sự rất nhỏ: đặt
submodule.<name>.branch
thành master
sẽ khôi phục hành vi cũ.
Lưu ý rằng, với Git 2.29 (Q4 2020), các thử nghiệm trong contrib/
được điều chỉnh theo thay đổi gần đây thành fmt-merge-msg
.
Xem cam kết b87528c (03/08/2020) bởi Emily Shaffer ( nasamuffin
) .
(Merged bởi Junio C Hamano - gitster
- trong phạm 83b8250 , ngày 10 tháng 8 2020)
Revert "contrib
:: subtree
điều chỉnh kiểm tra để thay đổi trong fmt-merge-msg
"
Ký tên: Emily Shaffer
Trở lại trạng này cam kết 508fd8e8baf3e18ee40b2cf0b8899188a8506d07 .
Trong 6e6029a8 ( fmt-merge-msg
: cho phép bỏ qua điểm đến hợp nhất một lần nữa), chúng tôi lấy lại hành vi nơi hợp nhất chống lại ' master
', theo mặc định, không bao gồm " into 'master'
" ở cuối thông báo hợp nhất. Bản sửa lỗi kiểm tra này không còn cần thiết nữa.
Cũng thế:
Với Git 2.29 (Q4 2020), hãy cập nhật các bài kiểm tra để loại bỏ từ ' master
' khỏi chúng.
Xem cam kết f33f2d3 , cam kết b6211b8 (26 tháng 9 năm 2020) và cam kết 432f5e6 , cam kết 5a0c32b , cam kết 659288c (21 tháng 9 năm 2020) bởi Johannes Schindelin ( dscho
) .
(Hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 58138d3 , ngày 05 tháng 10 năm 2020)
tests
: tránh các biến thể của master
tên chi nhánh
Người ký hợp đồng: Johannes Schindelin
Thuật ngữ master
này có một lịch sử dày đặc, đóng vai trò như một lời nhắc nhở thường xuyên về sự bất công về chủng tộc. Dự án Git không muốn tiếp tục điều này và đã bắt đầu tránh nó.
Bộ thử nghiệm sử dụng các biến thể của tên này cho các nhánh khác với tên mặc định. Ngoài t3200, nơi chúng tôi vừa giải quyết vấn đề này trong cam kết trước, những phiên bản đó có thể được đổi tên theo cách tự động vì chúng không yêu cầu bất kỳ thay đổi nào bên ngoài tập lệnh thử nghiệm, vì vậy hãy làm điều đó.
Do các nhánh được chạm vào có rất ít (nếu có) liên quan đến nhánh mặc định, chúng tôi chọn sử dụng một sơ đồ đặt tên hoàn toàn riêng biệt: topic_<number>
(không thể là topic-<number>
do t5515 sử dụng test_oid
máy móc với thuật ngữ và máy móc đó sử dụng các biến shell bên trong, có tên không được chứa dấu gạch ngang).
Thủ thuật này được thực hiện bởi lệnh gọi sed (GNU) này:
$ sed -i 's/master\([a-z0-9]\)/topic_\1/g' t/t*.sh
Và, vẫn với Git 2.29:
Xem cam kết 538228e , cam kết a15ad5d (08 tháng 10 năm 2020) bởi Johannes Schindelin ( dscho
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 62564ba , ngày 08 tháng 10 năm 2020)
t1415
: tránh sử dụng main
làm tên giới thiệu
Người ký hợp đồng: Johannes Schindelin
Để chuẩn bị cho một loạt bản vá sẽ thay đổi dự phòng init.defaultBranch
thành main
, chúng ta hãy không sử dụng main
làm tên tham chiếu trong tập lệnh thử nghiệm này.
Nếu không, ( người đàn ông ) muốn bắt những ref đó cũng sẽ bất ngờ bắt được .git for-each-ref ... | grep main
refs/heads/main
Vì các ref được đề cập là worktree-local (tức là mỗi worktree có một worktree riêng, giống như vậy HEAD
), và vì test case đã sử dụng worktree thứ cấp được gọi là " second
", first
thay vào đó hãy sử dụng tên " " cho các refs đó.
Trong khi ở đó, hãy điều chỉnh tiêu đề thử nghiệm nói về "repo" khi chúng có nghĩa là "worktree".