代码之家  ›  专栏  ›  技术社区  ›  Alejandro Alcalde

仅克隆git repo的.git目录

  •  14
  • Alejandro Alcalde  · 技术社区  · 10 年前

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

    Gentoo 当我再次同步所有Google Drive文件后,我意识到 .git

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

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

    我不想做 git clone

    有没有办法只克隆 .git(吉特) 文件夹,然后推送计算机中可能存在的任何本地更改?

    6 回复  |  直到 9 年前
        1
  •  25
  •   rfay    9 年前

    git clone --no-checkout <repo_url>
    

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

    cd myrepo
    git clone --no-checkout <repo_url> .
    
        2
  •  5
  •   Alejandro Alcalde    9 年前

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

    1. 我已将回购克隆到其他位置,例如(在 /tmp )
    2. 我已经复制了 .git 文件夹到我的原始repo文件夹
    3. 我做的 git status 在我原来的repo文件夹中,所有本地更改都在那里。

    希望它能帮助别人

        3
  •  2
  •   Alejandro Alcalde    9 年前
    1. git clone 从联机回购到计算机上的其他文件夹
    2. 检查您有兴趣比较本地文件的分支。
    3. 然后将文件夹内容复制/粘贴到新克隆的顶部。
    4. 查看更改内容(如果有任何更改,请按您的意愿提交)。
        4
  •  1
  •   Redsandro    8 年前

    基本上你想要的是新鲜的 .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
    
        5
  •  1
  •   EvgenKo423    4 年前

    正如在另一个答案中所说的,有一个 --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>
    
        6
  •  0
  •   Yao Yuan    5 年前

    如果我有一个名为 local_directory ,我在github中创建了一个名为 remote_local_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命令,如与远程相关的本地存储库。

    推荐文章