仅克隆git仓库的.git目录

时间:2016-08-17 14:49:44

标签: git github version-control

我有一个与谷歌云端硬盘同步的回购,但我忽略了.git目录,现在它已上传到谷歌云端硬盘。

最近我格式化了我的Gentoo计算机,在我再次同步所有Google云端硬盘文件后,我发现.git目录不在那里。

问题是我不记得我是否在本地没有被推到github的一些未经标记/未经修改的更改。

我一直在搜索,但我只找到了相反问题的答案(克隆没有.git目录)

在我确定可能的本地更改不会丢失之前,我不想制作git clone我的回购。

是否有任何方法只能克隆.git文件夹,然后推送我机器中可能存在的任何本地更改?

6 个答案:

答案 0 :(得分:13)

一步解决方案是:

git clone --no-checkout <repo_url>

或者如果你已经有一个空的目录,

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

答案 1 :(得分:5)

我解决了。这是一个简单的过程:

  1. 我已将回购克隆克隆到其他地方,例如(/tmp
  2. 我已将.git文件夹复制到我的原始仓库文件夹
  3. 我在原始repo文件夹上做了git status,所有本地更改都在那里。
  4. 希望它有助于其他人

答案 2 :(得分:2)

  1. 从您的在线仓库中将git clone发送到您计算机上的其他文件夹
  2. 检查您有兴趣比较本地文件的分支。
  3. 然后将文件夹内容复制/粘贴到新克隆的顶部。
  4. 检查是否有更改(如果有的话,并按照您的意愿提交)。

答案 3 :(得分:1)

基本上,您想要的是一个全新的.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

答案 4 :(得分:0)

正如在另一个答案中所说的,--no-checkout 命令有一个 git clone 选项,但这不是问题的直接或完整解决方案:

  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
    

如果有更多人使用同一个存储库(也有一些远程更改),您将很难figuring out which state your local repository was in

另一方面,如果您确定没有本地更改,只需删除您的工作树并进行完整克隆会更容易:

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

答案 5 :(得分:0)

如果我有一个名为 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 只克隆 .git 目录 和 git init 将重新初始化本地存储库

使用其他git命令,如本地仓库与远程相关。