Xóa phụ thuộc ngã ba của kho lưu trữ GitHub


206

Làm cách nào tôi có thể khiến GitHub quên hoặc tách rời rằng repo của tôi ban đầu là một nhánh của một dự án khác?

Tôi đã rẽ nhánh một dự án trong GitHub. Bây giờ tôi có thể thấy "rẽ nhánh từ bất cứ điều gì / bất cứ điều gì". Kho lưu trữ mẹ "bất cứ điều gì / bất cứ điều gì" không còn được duy trì. Tôi đã được phép tiếp tục sử dụng cơ sở mã của kho lưu trữ ban đầu để tạo một kho lưu trữ độc lập.

Có cách nào để tách dự án của tôi khỏi kho lưu trữ ban đầu không?

Câu trả lời:


175

Bạn có thể liên hệ với bộ phận hỗ trợ của github và yêu cầu họ chuyển kho lưu trữ của bạn sang "chế độ bình thường".

Trên trang này , đoạn "Cam kết được thực hiện trong một ngã ba", nó được giải thích rằng người ta phải thông qua hỗ trợ để chuyển đổi. Do đó, có khả năng là không có cách nào để tự làm điều đó (trừ khi bạn phá hủy và tạo lại repo đã được giải thích trước đó ... nếu bạn làm như vậy hãy cẩn thận nếu bạn có vé hoặc wiki kèm theo dự án của bạn vì chúng sẽ bị xóa!).


30
Tôi có thể xác nhận rằng việc liên hệ với bộ phận Hỗ trợ hoạt động hoàn hảo, cộng với việc họ thường trả lời trong vài giờ :-)
BenC

1
Trang được liên kết không còn chứa thông tin đã nêu.
Kara Brightwell

3
@MattBrennan Trang đã thay đổi nhưng phần cuối cùng vẫn bao gồm: "Để tách ngã ba và biến nó thành một kho lưu trữ độc lập trên GitHub.com hoặc GitHub Enterprise, hãy liên hệ với bộ phận hỗ trợ GitHub hoặc quản trị viên trang web của bạn."
Thomas Moulard

1
Siêu nhanh .. họ trả lời tôi sau 1 giờ. Cảm ơn
myDoggyWritesCode

2
Trong Github Enterprise, bạn có thể tìm thấy ngay bây giờ trong quản trị viên-> Cộng tác-> Mạng và tùy thuộc vào trường hợp sử dụng của bạn, bạn nên sử dụng 'Tạo gốc', 'Tách' hoặc 'Trích xuất'.
Kutzi

45

Bạn có thể nhân đôi kho lưu trữ rẽ nhánh sang một kho lưu trữ mới (không có phần phụ của ngã ba) từ giao diện người dùng github, sau đó xóa kho lưu trữ gốc:

  • Đăng nhập vào github
  • Chọn dấu + ở góc trên cùng bên phải và Nhập kho .
  • Nhập kho lưu trữ của bạn. Các kho lưu trữ mới sẽ không có phụ thuộc ngã ba.
  • Xóa kho lưu trữ gốc, rẽ nhánh trong cài đặt kho lưu trữ.

1
Đây là cách dễ nhất và những gì nó làm việc cho tôi :). Rất thông minh.
moxi

1
Có ai khác có vấn đề với tính năng nhập "treo" không? Của tôi đã được "Phát hiện hệ thống kiểm soát phiên bản dự án của bạn" trong khoảng 5 giờ. Tôi không chắc chắn nếu tôi đang được xếp hàng hay đó là một hang thực sự. Các repo là nhỏ. Cố gắng để nó qua đêm chỉ trong trường hợp tôi đang xếp hàng.
Benjamin West

Cuối cùng tôi đã tò mò và chỉ cần nhấp vào "hủy". Nhấp vào hủy bỏ cho phép nó bỏ qua phát hiện VCS và chỉ cần nhập mã / cam kết / chi nhánh, v.v ... Đây là trường hợp khi nhập Github -> Github. Việc nhập có thể không bị treo nếu tôi đến từ một VCS khác? Không chắc. Cũng xin lưu ý khi làm điều này với một repo thứ hai, tôi đã phải hủy hai lần để nó hoạt động. Nếu CLI sao chép tất cả cùng một dữ liệu có thể là một phương pháp tốt hơn, nhưng hy vọng điều này sẽ giúp những người khác chọn tuyến đường này.
Benjamin West

9
Chỉ cần rõ ràng, phương pháp này sẽ không bảo tồn các vấn đề và kéo yêu cầu.
golopot

Hoạt động như quyến rũ! Cảm ơn bạn là cứu cánh! :)
bỏ qua

44

Hãy chắc chắn rằng bạn có tất cả các nhánh và thẻ quan trọng trên repo cục bộ của bạn, xóa repo github, tạo lại kho lưu trữ thông qua các phương tiện thông thường (không bỏ qua) và đẩy kho lưu trữ cục bộ trở lại git push --all. Lưu ý rằng nếu bạn có các chi nhánh địa phương mà bạn không muốn xuất bản, có thể đáng để tạo một bản sao cục bộ tạm thời cho hoạt động.

Tuy nhiên, điều này cũng sẽ thoát khỏi wiki và các vấn đề. Vì wiki trên thực tế là kho lưu trữ của riêng nó, nó có thể được xử lý tương tự bằng cách nhân bản nó và sau đó tạo lại và đẩy. Địa chỉ repo nằm trên trang Git Access của wiki ( git@github.com:user/repo.wiki.git).

Điều này để lại vấn đề. Chúng có thể được xuất qua API , nhưng theo tôi biết, bạn chỉ có thể tạo các vấn đề và nhận xét với người của mình, vì vậy việc nhập chúng hoàn hảo là không thể.

Vì vậy, nếu bạn cần các vấn đề cần được bảo tồn, bạn nên thông qua hỗ trợ github như Thomas Moulard gợi ý.


Tùy thuộc vào có bao nhiêu vấn đề, có thể chuyển từng cái một sang kho lưu trữ mới trước khi xóa từ cái cũ khỏi web ( help.github.com/en/github/managing-your-work-on- github / khoan ). Tôi đoán một cá nhân xác định có thể chuyển hơn 100 vấn đề mỗi giờ - không phải là một niềm vui, nhưng đối với nhiều kho lưu trữ là một điều có thể làm được.
Suma

22

Tôi đã gặp vấn đề tương tự, và cuối cùng đã sử dụng trang trợ giúp github này để giải quyết nó. Tôi không bận tâm về wiki và các vấn đề theo dõi vì nó dành cho blog của tôi bằng cách sử dụng một chủ đề được phát triển bởi một người dùng khác.

Để tách một repo rẽ nhánh và sử dụng nó như của riêng bạn sau một vài lần cam kết mà không làm mất toàn bộ lịch sử:

git clone --bare git@github.com:user/forked_repo.git

Tạo một reposity trống mới new-repositorytrên trang web github. Và đẩy một phiên bản nhân đôi:

cd user.github.com.git/

git push --mirror git@github.com:user/new-repository.git

Người ta có thể đổi tên trên github, forked_repositoryvới một tên khác để giữ nó làm bản sao lưu và kiểm tra cập nhật nếu cần. Hoặc đơn giản là xóa nó.

Đổi tên thành new-repositorytên gốc thực hiện công việc. Là một tác dụng phụ, các cam kết của bạn hiện xuất hiện trong lịch sử của bạn.


11

Điều này chỉ áp dụng cho GitHub Enterprise, không phải trên github.com

Đăng nhập vào tài khoản có quyền quản trị viên:

  1. Chuyển đến kho lưu trữ mà bạn cần tách ra: https://<ghe url>/<org>/<repo>
  2. Nhấp vào tên lửa của trang web Admin Admin trên góc trên bên phải
  3. Nhấp vào "Cộng tác" trên thanh menu trên cùng
  4. Nhấp vào mạng Network trên khung bên trái
  5. Nhấp vào trên Make Make Root gạch trong khung Cấu trúc mạng
  6. Chấp nhận

Điều này đã được thử nghiệm trên GitHub Enterprise 2.9


Tùy thuộc vào trường hợp sử dụng của bạn, 'Detach' hoặc 'Extract' có thể phù hợp hơn. Tôi thấy 'Make Root' hơi kỳ lạ vì về cơ bản nó sẽ đảo ngược hướng gốc hiện tại-> hướng con. (Doanh nghiệp Github 2.17)
Kutzi

10

Sử dụng thông tin từ aurelienClayton , tôi đã có thể làm điều này với những điều sau:

$ git clone --bare https://github.com/my/forked_repo.git
<delete forked_repo on GitHub>
<recreate repo on GitHub using same name>
$ cd forked_repo.git
$ git push --mirror

Đây là tài liệu chogit clone --bare :

Tạo một kho Git trần. Đó là, thay vì tạo <directory>và đặt các tệp quản trị vào <directory>/.git, hãy tạo <directory>chính nó $GIT_DIR. Điều này rõ ràng ngụ ý -n bởi vì không có nơi nào để kiểm tra cây làm việc. Ngoài ra, các đầu nhánh ở điều khiển từ xa được sao chép trực tiếp vào các đầu nhánh cục bộ tương ứng mà không ánh xạ chúng tới refs/remotes/origin/. Khi tùy chọn này được sử dụng, cả các nhánh theo dõi từ xa cũng như các biến cấu hình liên quan đều không được tạo.

Đây là tài liệu chogit push --mirror :

Thay vì đặt tên mỗi ref để push, quy định cụ thể rằng tất cả các refs dưới refs/(bao gồm nhưng không giới hạn refs/heads/, refs/remotes/refs/tags/) được phản ánh vào kho từ xa. Các ref mới được tạo cục bộ sẽ được đẩy đến đầu từ xa, các ref được cập nhật cục bộ sẽ được cập nhật ở đầu từ xa và các ref được xóa sẽ bị xóa khỏi đầu từ xa. Đây là mặc định nếu tùy chọn cấu hình remote.<remote>.mirrorđược đặt.

Lưu ý: giống như các gitcâu trả lời dựa trên khác , điều này sẽ không sao chép các vấn đề không phải là một phần của gitrepo như wiki và các vấn đề. Mỗi Tapio:

  • Wiki là một repo git riêng biệt và có thể được xử lý theo cách tương tự cho mỗi Tapio. Địa chỉ là : git@github.com:user/repo.wiki.git.
  • Các vấn đề có thể được xuất qua API GitHub nhưng có vấn đề khi tạo lại chúng vì chúng chỉ có thể được tạo bởi người dùng của bạn, vì vậy việc nhập sẽ mất thông tin.
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.