如何克隆到非空目录?
我有目录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树中的任何文件。 以下是我所做的:
- 转到Web树并运行
git init
- 转到存储库的预期位置,然后运行:
git clone --bare /path/to/web/repo
- 编辑远程仓库中的configuration文件并删除
[remote "origin"]
部分。 - 添加一个
[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
瞧!