1. ホーム
  2. git

[解決済み] 空でないディレクトリにクローンを作成するにはどうすればよいですか?

2022-03-15 10:45:24

質問

私は、ディレクトリBに一致するファイルを持つディレクトリAを持っています。ディレクトリAは、他の必要なファイルを持っているかもしれません。ディレクトリBはgitレポです。

ディレクトリBをディレクトリAにクローンしたいのですが、ディレクトリが空でないため、git-cloneではできません。

.gitをクローンするだけで、すべてのファイルが一致するので、そこから行けるのではと期待していたのですが?

ディレクトリAにあるファイルで、ディレクトリBにないものがあり、それらを残しておきたいので、空のディレクトリにクローンできません。

プッシュ/プルするためのrefが必要で、それを手動で設定したくないので、.gitをコピーすることは選択肢にない。

何か方法はないでしょうか?

更新:これでうまくいくと思うのですが、どなたか問題ないでしょうか?-->

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

解決方法は?

以下のシェルコマンドで existing-dir はディレクトリで、その内容は repo-to-clone git リポジトリを使用します。

# 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