什么是“克隆”到现有文件夹的最佳做法?
我有一个项目的工作副本,没有任何源代码pipe理元数据。 现在,我想做相当于git克隆到这个文件夹,并保持我的本地更改。
git-clone不允许我克隆到一个现有的文件夹。 这里最好的做法是什么?
 这可以通过克隆到一个新目录,然后将.git目录移动到您的现有目录来完成。 
如果您的现有目录名为“代码”。
 git clone https://myrepo.com/git.git temp mv temp/.git code/.git rm -rf temp 
这也可以在克隆命令期间不做结账的情况下完成; 更多的信息可以在这里find。
不要克隆,取而代之。 在回购:
 git init git remote add origin $url_of_clone_source git fetch origin git checkout -b master --track origin/master # origin/master is clone's default 
然后你可以重置树来获得你想要的提交:
 git reset origin/master # or whatever commit you think is proper... 
你就像你克隆。
这里有一个有趣的问题(和一个没有答案的问题):如何找出你的赤裸裸的树是基于哪个提交,因此重置到哪个位置。
 我会git clone到一个新的目录,并将现有目录的内容复制到新的克隆。 
使用临时目录是好的,但如果你想避免这一步,这将工作。 从你的工作目录的根目录:
 $ rm -fr .git $ git init $ git remote add origin your-git-url $ git fetch $ git reset --mixed origin/master 
 git clone your_repo tmp && mv tmp/.git . && rm -rf tmp && git reset --mixed 
以下我做了,在现有的目录结帐主分支:
 git init git remote add origin [my-repo] git fetch git checkout origin/master -ft 
要将git repo克隆到空的现有目录中,请执行以下操作:
 cd myfolder git clone https://myrepo.com/git.git . 
 注意到. 在你的git clone命令的末尾。 这将下载到当前工作目录的回购。 
有两种方法。 在可能的情况下,我会从新的git工作目录的一个干净的文件夹开始,然后在以后复制你的版本。 这可能看起来像*:
 mv $dir $dir.orig git clone $url $dir rsync -av --delete --exclude '.git' $dir.orig/ $dir/ rm -rf $dir.orig 
 在这一点上,你应该有一个相当干净的工作副本,你以前的工作文件夹作为当前的工作目录,所以如果你运行git status包括文件删除在内的任何改变都会显示出来。 
另一方面,如果你真的必须这样做,你可以得到像这样的结果:
 cd $dir git clone --no-checkout $url tempdir mv tempdir/.git . rmdir tempdir git reset --mixed HEAD 
 无论哪种方式,我会做的第一件事就是运行一些东西像git stash以获得所有本地更改的git stash副本,然后您可以重新应用它们,并通过哪些你想提交的工作。 
* 这两个例子都假定你从你项目的父目录下的shell开始。
 如果您至less使用git 1.7.7(其中教导clone --config选项),将当前目录转换为工作副本: 
 git clone example.com/my.git ./.git --mirror --config core.bare=false 
这工作:
-  将资源.git到一个新的.git文件夹中
-   --mirror将新克隆变成纯粹的元数据文件夹,就像.git需要的那样
-   --config core.bare=false反制--mirror选项的隐含的bare=true,从而允许存储库有一个关联的工作目录,并像一个普通的克隆
 如果一个.git元数据目录已经存在于你想要转换成工作副本的目录中,这显然不起作用。 
很多答案已经按照OP的要求做了。 但值得注意的是,相反的做法则简单得多:
 git clone repo-url tmp/ cp -R working/ tmp/ 
你现在有所需的目标状态 – 新鲜克隆+本地更改。