Tôi muốn sao chép một kho lưu trữ từ GitHub. Vấn đề là tôi không muốn chi nhánh chính; Tôi muốn phiên bản trong yêu cầu kéo không được chấp thuận này .
Tôi có thể sao chép phiên bản yêu cầu kéo thay vì kho lưu trữ chính không?
Tôi muốn sao chép một kho lưu trữ từ GitHub. Vấn đề là tôi không muốn chi nhánh chính; Tôi muốn phiên bản trong yêu cầu kéo không được chấp thuận này .
Tôi có thể sao chép phiên bản yêu cầu kéo thay vì kho lưu trữ chính không?
Câu trả lời:
Bạn có thể sao chép nhánh bạn muốn bằng cách sử dụng -b
tùy chọn và cho yêu cầu kéo:
git clone https://github.com/user_name/repo_name.git -b feature/pull_request_name dir_name
Trong trường hợp của bạn, nhánh bạn muốn sao chép là nhánh nguồn của yêu cầu kéo ( feature/mongoose-support
):
git clone https://github.com/berstend/frappe.git -b feature/mongoose-support ./mongoose-support
Cách dễ nhất để làm điều đó là như thế này:
git fetch origin pull/2/head
git checkout -b pullrequest FETCH_HEAD
Bây giờ bạn sẽ ở trên một nhánh mới ở trạng thái yêu cầu kéo.
Bạn có thể muốn thiết lập bí danh bằng cách chạy
git config --global alias.pro '!f() { git fetch -fu ${2:-origin} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f'
Bây giờ bạn có thể kiểm tra bất kỳ PR nào bằng cách chạy git pr <pr_number>
hoặc git pr <pr_number> <remote>
nếu điều khiển từ xa github của bạn không được đặt tên origin
.
.gitconfig
tập tin của mình dưới [alias]
: pr = "!f() { git fetch $1 pull/$2/head:pull_$2; git co pull_$2; }; f"
. Bằng cách đó tôi chỉ cần gõ git pr upstream 62
và điều tiếp theo tôi biết, tôi đang ở một nhánh mới của PR # 62 từ thượng nguồn! Nếu bạn luôn sử dụng, origin
bạn có thể mã hóa nó thay vì $1
, nhưng điều đó sẽ giúp tôi.
co
git fetch origin refs/pull/PR_NUMBER/head:NEW_LOCAL_BRANCH
ví dụ:
$ git fetch origin pull/611/head:pull_611
$ git checkout pull_611
Thực hiện thay đổi, cam kết chúng, PUSH và mở PR mới từ ngã ba của bạn trên GitHub
Bạn có thể làm theo hướng dẫn trong ý chính này để có thể kiểm tra từ xa trực tiếp mà không cần phải tìm ra kho lưu trữ và chi nhánh của họ.
Ví dụ sử dụng
Đối với một trong những dự án của tôi (github3.py) tôi có những điều sau đây trong github3.py/.git/config
[remote "github"]
fetch = +refs/heads/*:refs/remotes/github/*
fetch = +refs/pull/*/head:refs/remotes/github/pr/*
url = git@github.com:sigmavirus24/github3.py
Dòng đầu tiên là tiêu chuẩn cho mọi điều khiển từ xa với ngoại lệ github
được thay thế bằng tên của điều khiển từ xa. Điều này có nghĩa là các đầu từ xa (hoặc các đầu của các nhánh trên máy chủ đó) được "ánh xạ" tới các điều khiển từ xa cục bộ có tiền tố github/
. Vì vậy, nếu tôi đã làm git fetch github
và có một chi nhánh trên GitHub chưa được chú ý cục bộ trên máy của tôi, nó sẽ tải xuống chi nhánh và tôi có thể chuyển sang chi nhánh như vậy : git checkout -t github/branch_name
.
Dòng thứ hai thực hiện điều tương tự, nhưng nó thực hiện nó cho các yêu cầu kéo thay vì các nhánh git tiêu chuẩn. Đó là lý do tại sao bạn nhìn thấy refs/pull/*/head
. Nó tìm nạp phần đầu của mỗi yêu cầu kéo trên GitHub và ánh xạ tới nó github/pr/#
. Vì vậy, nếu ai đó gửi yêu cầu kéo và được đánh số 62 (ví dụ), bạn sẽ làm:
git fetch github
git checkout -t github/pr/62
Và sau đó bạn sẽ ở một chi nhánh địa phương được gọi là pr/62
(giả sử nó không tồn tại). Thật tuyệt và có nghĩa là bạn không phải theo dõi các điều khiển từ xa hoặc chi nhánh của người khác.
git clone https://github.com/berstend/frappe.git -b feature/mongoose-support /my_clone
từ tài liệu chính.
git fetch github
bạn có thể làm git co -t github/pr/#
. Điều này ngăn bạn khỏi phải sao chép và dán URL từ xa, tìm ra tên chi nhánh, v.v. Sau đó, bạn sẽ có được tên chi nhánh chính xác, ngắn gọn và chính xác mà không gặp rắc rối thêm. Nhưng tôi hiểu nó có vẻ quá sức.
git clone git://github.com/dweldon/frappe
cd frappe
git pull origin pull/2/head
git pull
tạo ra một sự hợp nhất vào chi nhánh hiện tại; thường là cho một PR mà bạn muốn chỉ git fetch
để lấy mã của tác giả gốc (sau đó có thể truy cập dưới dạng FETCH_HEAD). Nếu bạn thực sự muốn hợp nhất, thì cũng đáng đề cập pull/2/merge
(thay vì pull/2/head
) - điều này khiến GitHub cung cấp cho bạn cam kết hợp nhất chính xác sẽ xảy ra nếu bạn nhấp vào nút [Hợp nhất] ngay bây giờ.
Khi người dùng gửi yêu cầu kéo, họ sẽ yêu cầu một số thay đổi được hợp nhất từ một nhánh trên bản sao của một ngã ba trở lại kho lưu trữ của người dùng khác.
Những thay đổi bạn muốn có thể nhận được từ nguồn yêu cầu kéo. Để thực hiện việc này, sao chép kho lưu trữ của người dùng ( git://github.com/berstend/frappe.git
) và sau đó kiểm tra nhánh mà anh ta đã tạo yêu cầu kéo từ ( feature/mongoose-support
).
Sau khi cài đặt git-ngoại vi
(cd /tmp && git clone --depth 1 https://github.com/tj/git-extras.git && cd git-extras && sudo make install)
Bạn chỉ có thể sử dụng git pr
$ git pr 62 [remote]
Với giao diện dòng lệnh mới chính thức của Github :
gh repo clone org/repo
cd repo
gh pr checkout 44
nơi 44
là số PR, nhưng cũng có thể là tên chi nhánh.
Xem thêm chi tiết và các tùy chọn và hướng dẫn cài đặt .
clone
nhưng đối vớifetch
see: stackoverflow.com/questions/6743514/...