[英]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> .
我解決它。 這是一個簡單的過程:
/tmp
中).git
文件夾復制到我原來的 repo 文件夾中git status
並且所有的本地更改都在那里。希望它可以幫助別人
git clone
到您機器上的不同文件夾基本上你想要的是一個新的.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
選項,但這不是解決問題的直接或完整解決方案:
因此,如果您只是將.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.