簡體   English   中英

僅克隆 git repo 的 .git 目錄

[英]Clone only the .git directory of a git repo

我有一個與 google Drive 同步的 repo,但我忽略了 .git 目錄,因此它現在已上傳到 Google Drive。

最近我格式化了我的Gentoo機器,在我再次同步所有 Google Drive 文件后,我意識到.git目錄不存在。

問題是我不記得我是否在本地有一些未標記/未提交的更改未推送到 github。

我一直在搜索,但只找到了相反問題的答案(沒有.git目錄的克隆)

在確定可能的本地更改不會丟失之前,我不想對我的存儲庫進行git clone

有沒有辦法只克隆.git文件夾,然后推送我機器中可能有的任何本地更改?

一步解決方案是:

git clone --no-checkout <repo_url>

或者如果你已經有一個空目錄,

cd myrepo
git clone --no-checkout <repo_url> .

我解決它。 這是一個簡單的過程:

  1. 我已將 repo 克隆到不同的位置,例如(在/tmp中)
  2. 我已將.git文件夾復制到我原來的 repo 文件夾中
  3. 我在我原來的 repo 文件夾上做了git status並且所有的本地更改都在那里。

希望它可以幫助別人

  1. 從您的在線存儲庫執行git clone到您機器上的不同文件夾
  2. 簽出您有興趣比較本地文件的分支。
  3. 然后將您的文件夾內容復制/粘貼到新克隆的頂部。
  4. 檢查以查看發生了什么變化(如果有的話並按照您的意願提交)。

基本上你想要的是一個新的.git目錄,沒有對文件進行任何更改,因此你可以執行git status並查看是否有任何更改。

期望您的pwd是您的項目目錄,其中包含一個舊的.git目錄,該目錄設置了存儲庫的origin ,您可以運行以下命令:

mkdir -p /var/www/tmp/_delme \
    && git clone --no-checkout `cat .git/config | grep url | awk -F' = ' '{print $2}'` /var/www/tmp/_delme \
    && rm -rf .git \
    && mv /var/www/tmp/_delme/.git . \
    && git add -A
    && rm -rf /var/www/tmp/_delme

正如在另一個答案中所說, git clone命令有一個--no-checkout選項,但這不是解決問題的直接或完整解決方案:

  1. 它拒絕克隆到非空目錄;
  2. 它不會恢復索引(因為目錄中應該沒有文件)。

因此,如果您只是將.git目錄移動到工作樹中並運行git status ,您將得到不正確的結果:

On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
        deleted:    Home.rest

Untracked files:
        Home.rest

話雖如此,有兩種方法可以解決問題:

  • 使用臨時目錄克隆:
     $ git clone -n <repo_url> tmp $ mv tmp/.git/ . && rm -d tmp $ git read-tree HEAD
  • 使用工作樹模仿現有目錄中的克隆:
     $ git init $ git remote add -m master -f origin <repo_url> $ git reset refs/remotes/origin/HEAD $ git branch -u origin

如果有更多人在使用同一個存儲庫(也有一些遠程更改),您將很難確定您的本地存儲庫處於哪個狀態

另一方面,如果您確定沒有本地更改,則只需刪除您的工作樹並進行完整克隆會更容易:

$ rm -rf <local_repo_dir>
$ git clone <repo_url> <local_repo_dir>

如果我有一個名為local_directory的目錄,我會在 github 中創建一個名為remote_local_directory的新存儲庫。 我想將 local_directory 推送到 remote_directory。

我使用這些命令

git clone --bare ${remote_directory}.git local_directory/.git
cd local_directory
git init
git add .
git commit
git push --set-upstream origin master

git clone --bare only clone .git目錄和git init將重新初始化本地存儲庫

使用其他 git 命令,如本地存儲庫與遠程有關。

暫無
暫無

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

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