[英]Getting a working copy of a bare repository
我有一台服務器,上面有一個用於推送的裸存儲庫。 但是,我的服務器需要有一個 master 分支的工作副本。
如何獲取工作副本並且僅從裸存儲庫獲取?
您可以簡單地將存儲庫克隆到同一台機器上的另一個目錄:
git clone /bare/repo/dir
當前目錄將成為您的 repo 的非裸克隆,您將自動獲得master
分支的檢出。 然后使用像git pull
這樣的常用命令根據需要更新它。
附帶的好處是,這個操作非常有效——如果你為git clone
指定一個本地目錄,git 將使用硬鏈接來共享兩個 repos 的對象數據庫的只讀部分。
裸倉庫只是工作目錄的 .git 目錄,以及本地配置文件中的一個條目。 我將裸存儲庫轉換為完整存儲庫的操作是:
.git
並將裸存儲庫中的所有文件移動到那里.git/config
文件,將bare = true
更改為bare = false
您可以在 Windows 上的.git
目錄上設置 Hidden 屬性,但不能在目錄內的文件上設置。
我一直在尋找的“沾邊的工作樹”的方法(如看到這里):
git init --bare
git config core.bare false
git config core.worktree /somewhere/else/
git checkout -f
這對我有用:
git --git-dir=path-to-bare-repo.git --work-tree=path-to-target checkout master .
此命令會將存儲庫中的所有文件提取到path-to-target
指定的目錄中
這是對其他 2 個答案的即興演奏,但它填補了我的用例的空白——它適用於從源更新 repo 並檢查分支和任何 git 操作,因為你最終會得到一個正常的完整 git repo。
git clone /path/to/bare/repo /new/path/to/full/repo
cd /new/path/to/full/repo
git remote set-url origin git@github.com:swift/swift.git
執行這 3 行代碼后,您可以git pull
和git branch
以及git checkout some_branch
等等,因為您現在有一個正常的完整 git repo 連接到您的遠程 repo。
這是它的工作原理:
$ git init --separate-git-dir /path/to/existing-bare-repository /path/to/workdir
$ cd /path/to/workdir
$ git checkout .
瞧!
有關信息: git init
將報告: Reinitialized existing Git repository in /path/to/existing-bare-repository
。 但要自信。 man git-init
說:在現有存儲庫中運行 git init 是安全的。 它不會覆蓋已經存在的東西。
神奇的是,單獨的git init
不會使您的文件出現在工作目錄中。 您必須簽出根目錄。
您可以為此使用“git show”。
http://www.kernel.org/pub/software/scm/git/docs/git-show.html
基本上:
git --no-pager --git-dir /path/to/bar/repo.git show branch:path/to/file.txt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.