How do I clone into a non-empty directory?
I have directory A with files matching directory B. Directory A may have other needed files. Directory B is a git repo.
I want to clone directory B to directory A but git-clone won't allow me to since the directory is non-empty.
I was hoping it would just clone .git and since all the files match I could go from there?
I can't clone into an empty directory because I have files in directory A that are not in directory B and I want to keep them.
Copying .git is not an option since I want refs to push/pull with and I don't want to set them up manually.
Is there any way to do this?
Update: I think this works, can anyone see any problems? -->
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
In the following shell commands
existing-dir is a directory whose contents match the tracked files in the
repo-to-clone git repository.
# 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
This worked for me:
git init git remote add origin PATH/TO/REPO git fetch git reset origin/master # Required when the versioned files existed in path before "git init" of this repo. git checkout -t origin/master
-t will set the upstream branch for you, if that is what you want, and it usually is.
Read more... Read less...
A slight modification to one of the answers that worked for me:
git init git remote add origin PATH/TO/REPO git pull origin master
to start working on the master branch straight away.
Here's what I ended up doing when I had the same problem (at least I think it's the same problem). I went into directory A and ran
Since I didn't want the files in directory A to be followed by git, I edited .gitignore and added the existing files to it. After this I ran
git remote add origin '<url>' && git pull origin master et voíla, B is "cloned" into A without a single hiccup.
Another simple recipe seems to work well for me:
git clone --bare $URL .git git config core.bare false
My main use case for checking out to a directory with existing files is to control my Unix dotfiles with Git. On a new account, the home directory will already have some files in it, possibly even the ones I want to get from Git.
I have used this a few moments ago, requires the least potentially destructive commands:
cd existing-dir git clone --bare repo-to-clone .git git config --unset core.bare git remote rm origin git remote add origin repo-to-clone git reset