簡體   English   中英

帶有所有分支/標簽的遠程git存儲庫的完整本地副本

[英]Full local copy of remote git repository with all branches/tags

我想知道,您將如何繼續制作遠程git存儲庫的完整本地副本,該副本可以在原始存儲庫中使用。

到目前為止,我發現的所有指南都描述了如何將遠程git存儲庫復制到另一個遠程git存儲庫。

這樣的指南之一是:

如何移動完整的Git存儲庫

$ git clone https://github.com/Sample/sample.git
$ cd sample.git
$ git checkout remotes/origin/HEAD
$ git checkout remotes/origin/develop
$ git checkout remotes/origin/master
$ git checkout remotes/origin/micros-integration
$ git checkout remotes/origin/release/0.4.8
$ git checkout remotes/origin/release/0.6.0
$ git checkout remotes/origin/remove-keygen
$ git fetch --tags
$ git remote rm origin
$ git remote add origin https://github.com/Target/target.git
$ git push origin --all
$ git push --tags

還有一個:

鏡像沒有本地副本的git倉庫

$ git clone --mirror git@github.com/Sample/sample.git
$ cd upstream-repository.git
$ git push --mirror git@github.com/Target/target.git

那么,如何在不鏈接到原始存儲庫的情況下繼續創建本地副本? 如果只想維護特定的分支並刪除所有其他內容,包括所有歷史記錄(拉請求,代碼更改等),應該怎么做?

要復制包含所有分支和標簽(和其他引用)的倉庫,請使用

git clone --mirror <repo-url>

要將副本與原始副本斷開鏈接,請使用cd進入repo目錄,然后

git remote remove origin

如果您只想保留分支的子集,則最佳過程取決於具體細節。 您也許可以限制克隆的內容,但是確切的操作方法取決於您要保留的內容。

作為一般解決方案,克隆后,您可以從克隆中刪除不需要的分支(和其他引用),然后運行gc

git branch -D unwanted-branch
git tag -D unwanted-tag
git gc --aggressive --prune=all

gc不會從任何引用(分支,標簽等)或任何引用日志中刪除任何可訪問的內容,但是新克隆的副本不應包含任何引用日志包。 您可以驗證哪些引用存在

git for-each-ref

如果gc給您帶來麻煩,另一種選擇是克隆克隆

git clone --mirror file://localhost/path/to/first/clone

不應期望它們轉移不必要的對象。 (但是同樣,任何可達的內容都會被復制,除非您的克隆命令限制了該復制,例如通過--single-branch或淺歷史記錄選項。)

無論使用哪種方法,都會保留對象的可訪問性,其中可能包括構成已刪除分支的提交(例如,如果該分支已合並到尚未刪除的分支中)。 因此,如果您有特定的要求來限制歷史記錄,而不是通過上述過程來完成,則可能需要更復雜的工具(如淺歷史記錄),並且該過程可能取決於很多細節。

另請注意,拉取請求不是git概念; PR是托管git remoets的環境的發明。 您可能有PR產生的合並提交,並且這些合並提交的處理方式與其他任何歷史記錄一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM