小编典典

如何克隆到非空目录?

all

我有目录 A 与目录 B 匹配的文件。目录 A 可能有其他需要的文件。目录 B 是一个 git repo。

我想将目录 B 克隆到目录 A 但 git-clone 不允许我这样做,因为该目录是非空的。

我希望它只会克隆 .git 并且由于所有文件都匹配,我可以从那里去吗?

我无法克隆到空目录,因为我在目录 A 中有文件不在目录 B 中,我想保留它们。

复制 .git 不是一种选择,因为我希望 refs 可以推/拉,我不想手动设置它们。

有没有办法做到这一点?

更新:我认为这可行,任何人都可以看到任何问题吗?-->

cd a
git clone --no-hardlinks --no-checkout ../b a.tmp 
mv a.tmp/.git .
rm -rf a.tmp
git unstage # apparently git thinks all the files are deleted if you don't do this

阅读 182

收藏
2022-03-04

共1个答案

小编典典

在以下 shell 命令existing-dir中是一个目录,其内容与repo-to-clonegit 存储库中的跟踪文件匹配。

# Clone just the repository's .git folder (excluding files as they are already in
# `existing-dir`) into an empty temporary directory
git clone --no-checkout repo-to-clone existing-dir/existing-dir.tmp # might want --no-hardlinks for cloning local repo

# Move the .git folder to the directory with the files.
# This makes `existing-dir` a git repo.
mv existing-dir/existing-dir.tmp/.git existing-dir/

# Delete the temporary directory
rmdir existing-dir/existing-dir.tmp
cd existing-dir

# git thinks all files are deleted, this reverts the state of the repo to HEAD.
# WARNING: any local changes to the files will be lost.
git reset --hard HEAD
2022-03-04