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

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

我希望它只是克隆。git,因为所有的文件匹配我可以从那里去?

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

复制.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

当前回答

这是我的工作,但你应该合并远程存储库文件到本地文件:

git init
git remote add origin url-to-git
git branch --set-upstream-to=origin/master master
git fetch
git status

其他回答

这招对我很管用:

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将为您设置上游分支,如果这是您想要的,而且通常是这样。

也许我误解了你的问题,但是如果你把文件从A复制/移动到git repo B,然后用git add添加所需的文件,不是更简单吗?

更新:从git文档:

仅当现有目录为空时才允许克隆到该目录。

来源:http://git-scm.com/docs/git-clone

我喜欢戴尔的回答,我还补充道

git clone --depth 2 --no-checkout repo-to-clone existing-dir/existing-dir.tmp
git branch dev_new214
git checkout dev_new214
git add .
git commit
git checkout dev
git merge dev_new214

浅深度避免了许多额外的早期开发提交。新的分支为我们提供了一个很好的可视化历史,其中有一些来自该服务器的新代码。在我看来,这是完美的使用分支。我感谢所有在这里发帖的人的洞察力。

我在几分钟前使用过这个,它需要最小的潜在破坏性命令:

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

瞧!

这是我的工作,但你应该合并远程存储库文件到本地文件:

git init
git remote add origin url-to-git
git branch --set-upstream-to=origin/master master
git fetch
git status