如何克隆到非空目录?

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

我想克隆目录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 PATH/TO/REPO git fetch git reset origin/master # this is required if files in the non-empty directory are in the repo git checkout -t origin/master 

注意: -t会为你设置上游分支,如果这是你想要的,通常是。

在以下shell命令中, 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 

对我工作的答案做了一点修改:

 git init git remote add origin PATH/TO/REPO git pull origin master 

马上开始在主分支上工作。

当我遇到同样的问题时,我最终做了什么(至less我觉得这是同样的问题)。 我进入目录A并运行git init

由于我不希望目录A中的文件被git所跟随,所以我编辑了.gitignore并将现有的文件添加到它。 在这之后,我运行git remote add origin '<url>' && git pull origin master etvoíla,B被“克隆”成一个没有任何打嗝的呃。

这对我工作:

 cd existing_folder git init git remote add origin path_to_your_repo.git git add . git commit git push -u origin master 
 git init git remote add origin PATH/TO/REPO git fetch git checkout -t origin/master -f 

从@ cmcginty的答案修改 – 没有-f它没有为我工作

另一个简单的配方似乎对我很好:

 git clone --bare $URL .git git config core.bare false 

我的主要用例是使用Git来控制我的Unix dotfiles。 在一个新帐户中,主目录中已经有一些文件,甚至可能是我想从Git获得的文件。

我正在寻找类似的东西,下面是我想到的:

我的情况是我有一个活动的Web树,我正在尝试创build一个远程存储库,而不移动当前Web树中的任何文件。 以下是我所做的:

  1. 转到Web树并运行git init
  2. 转到存储库的预期位置,然后运行: git clone --bare /path/to/web/repo
  3. 编辑远程仓库中的configuration文件并删除[remote "origin"]部分。
  4. 添加一个[remote "origin"]部分到web树中的.git / config指向新的远程仓库。

这对我来说是工作的,但是你应该把远程仓库文件合并到本地文件中:

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

也许我误解了你的问题,但如果你复制/移动文件从A到Git仓库B,并添加所需的GIT添加

更新:从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 

浅的深度避免了许多额外的早期开发提交。 新的分支给了我们一个很好的视觉历史,从这个服务器被放置了一些新的代码。这是我认为完美的使用分支。 感谢所有在这里发表的人的伟大见解。

我刚刚使用过这个,需要最less的潜在破坏性命令:

 cd existing-dir git clone --bare repo-to-clone .git git config --unset core.bare git reset 

瞧!