Làm cách nào để giữ cho ngã ba của tôi đồng bộ mà không cần thêm một điều khiển từ xa?


302

Giả sử có một kho lưu trữ someone/foobartrên GitHub, mà tôi đã rẽ nhánh me/foobar.

Làm cách nào để tôi lấy các xác nhận mới từ kho lưu trữ cha mẹ trực tiếp đến ngã ba của mình mà không phải thêm một điều khiển từ xa riêng biệt và nhớ thường xuyên kéo từ đó ?

Mục tiêu là để:

  • git pull để tìm nạp từ kho mẹ
  • git push gửi mọi thứ đến ngã ba của tôi

26
Câu trả lời đáng ngạc nhiên của @Olufemi dường như làm những gì bạn muốn, ngoại trừ như ChristianGosch ghi chú trong một bình luận, bạn kết thúc với một "cam kết hợp nhất" trên đầu chi nhánh của bạn và "không có gì để so sánh" sẽ không xuất hiện. Điều đó dường như không thể chấp nhận được đối với nhiều dự án mà bạn muốn làm chi nhánh cho họ để kéo. Vì vậy, có thực sự không có cách nào để thực hiện quy trình công việc đóng góp cơ bản nhất này trong github mà không chạy các lệnh git phức tạp trên máy tính cá nhân? Hoặc có lẽ tôi chỉ nên vứt bỏ toàn bộ repo của mình và tái ngã ba mỗi khi tôi muốn đóng góp ??
nealmcb

Bản sao có thể có của github, cập nhật dự án rẽ nhánh
mpromonet



@nealmcb Không phải là vấn đề với "cam kết hợp nhất" trên đầu chi nhánh của bạn có tránh được không nếu bạn phản đối?
Marko

Câu trả lời:


586

Mở kho lưu trữ Git rẽ nhánh me / foobar .

Nhấp vào So sánh :

Đây là một hình ảnh mẫu của trang

Bạn sẽ nhận được thông báo:

Không có gì để so sánh.
ai đó: chủ được cập nhật với tất cả các cam kết từ tôi: chủ . Hãy thử chuyển đổi cơ sở để so sánh của bạn.

Nhấp vào chuyển đổi cơ sở trên trang này:

Đây là một ví dụ trên trang

Sau đó, bạn có thể thấy tất cả các cam kết được thực hiện cho ai đó / foobar sau ngày bạn rẽ nhánh.

Nhấp vào Tạo yêu cầu kéo :

Đây là một trang mẫu

Đưa ra yêu cầu kéo một tiêu đề và có thể là một mô tả và nhấp vào Tạo yêu cầu kéo .

Trên trang tiếp theo, cuộn xuống cuối trang và nhấp vào Hợp nhất yêu cầu kéoXác nhận hợp nhất .

Kho lưu trữ Git của tôi me / foobar sẽ được cập nhật.

Chỉnh sửa: tùy chọn rebase được hiển thị ở đây:

nhập mô tả hình ảnh ở đây


50
Điều này gây nhầm lẫn bởi vì khi bạn chuyển đổi cơ sở, github sẽ ném bạn vào trang cho repo ban đầu, vì vậy có vẻ như bạn đang mở một yêu cầu kéo ở ngã ba ngược dòng. Nhưng nó hoàn toàn hoạt động.
Eduardo

8
Để tránh tình trạng đề cập đến khó hiểu ở trên, nó sẽ tốt hơn nhấp vào Editnút và tự chuyển đổi base forkđể me/foobarhead forkđể someone/foobar. Theo cách này thì rõ ràng hơn
macemers

26
Một số khác: Điều này hoạt động tốt nếu bạn đã làm điều đó trước đây, nhưng sau đó có "cam kết hợp nhất" trên đầu lịch sử cam kết của bạn. Do đó "không có gì để so sánh" sẽ không xuất hiện. Thay vào đó, người ta phải sử dụng nút "Chỉnh sửa" và trao đổi thủ công cơ sở và ngã ba để làm việc này.
Christian Gosch

26
Có cách nào để thoát khỏi cam kết hợp nhất lố bịch đó không?
kumarharsh

17
@kumar_harsh kể từ tháng 9 năm 2016 , giờ đây đã có tùy chọn "rebase and merge" cho các yêu cầu kéo để tránh các cam kết hợp nhất.
waldyrious

41
git remote set-url origin git@github.com:someone/foobar
git remote set-url origin --push git@github.com:me/foobar

Mặc dù có một cảnh báo:
Điều này là hoàn hảo nếu bạn là người duy nhất thực hiện thay đổi cho ngã ba của bạn.
Tuy nhiên, nếu nó được chia sẻ với người khác, bạn có thể phải rút từ ngã ba của mình, trong trường hợp đó một điều khiển từ xa riêng biệt là giải pháp duy nhất.

Chỉnh sửa:
Trên thực tế, bạn có thể git pull git@github.com:me/foobar , mà loại bỏ cảnh báo.
Sự lựa chọn là của bạn để dễ nhớ hơn.


8

Tôi đã sử dụng một phương pháp khá đơn giản bằng giao diện người dùng web GitHub để làm điều đó:

  1. Mở kho Git gốc (không phải kho Git rẽ nhánh me/foobar)
  2. Chuyển đến thư mục src và mở tệp bạn muốn thay đổi
  3. Nhấp vào biểu tượng bút. Nó sẽ tự động tạo nhãn trong ngã ba cá nhân của bạn có tên "patch-1" dựa trên phiên bản hiện tại của kho lưu trữ chính: Nhập mô tả hình ảnh ở đây
  4. Thưởng thức! Nhập mô tả hình ảnh ở đây

3
Thử điều này, về cơ bản sẽ mở trình soạn thảo trên tệp trong repo git gốc. Tôi không có đặc quyền ghi (theo thiết kế) vào repo git ban đầu. Dường như đối với phương pháp này, bạn phải thay đổi tệp, nếu không thì không có cách nào để "lưu" tệp. Nếu không lưu tệp, tôi không thể nhận được tương đương với nhánh "patch-1" của bạn để hiển thị trong kho lưu trữ của mình. Tôi đang thiếu gì ở đây?
Bunny điện tử

5

Các "Kéo" ứng dụng là một giải pháp tự động set-up-and-quên. Nó sẽ đồng bộ nhánh mặc định của ngã ba của bạn với kho lưu trữ ngược dòng.

Truy cập URL, nhấp vào nút "Cài đặt" màu xanh lục và chọn kho lưu trữ nơi bạn muốn bật đồng bộ hóa tự động.

Chi nhánh được cập nhật một lần mỗi giờ trực tiếp trên GitHub, trên máy cục bộ của bạn, bạn cần kéo chi nhánh chính để đảm bảo rằng bản sao cục bộ của bạn được đồng bộ hóa.

Cũng đã trả lời trong https://stackoverflow.com/a/58965171/946850 .


1

Một tùy chọn khác là sử dụng Update from upstreamRepoName/masternút trong GitHub cho Mac (và tôi giả sử GitHub cho Windows).

Nhập mô tả hình ảnh ở đây


TIL: có những ứng dụng dành cho GitHub ngoài giao diện web :-) [và thật xấu hổ khi trải nghiệm trên chúng không được thống nhất]
Tom Goodfellow

Tôi không thấy điều này trong Windows
Denis

1
@Denis đây là ứng dụng cũ của họ. Tôi không chắc ứng dụng mới của họ có nó.
Steve Moser

Aha. Điều này hoạt động trong "GitHub Desktop" (dành cho Mac, không chắc chắn về Windows).
michaelok

0

Tôi không biết làm thế nào nó có thể được thực hiện mà không cần thêm một điều khiển từ xa khác, tuy nhiên tôi luôn thêm repo mà tôi đã chọn từ upstreamxa để tôi có thể làm một cách đơn giản:

git branch -a|grep remotes/upstream| while IFS="/" read p r b; do echo Syncing $r/$b to origin/$b; git push origin $r/$b:refs/heads/$b; done

Điều này sẽ đồng bộ tất cả các chi nhánh bao gồm. tạo cái mới (loại bỏ refs/heads/để chỉ cập nhật các nhánh hiện có). Nếu bất kỳ chi nhánh nào của bạn bị phân kỳ, nó sẽ gây ra lỗi cho chi nhánh đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.