将git克隆到现有文件夹的最佳做法是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (10)
  • 关注 (0)
  • 查看 (343)

我有一个项目的工作副本,没有任何源代码管理元数据。 现在,我想做相当于git克隆到这个文件夹,并保留我的本地更改。

Git-克隆不允许我克隆到现有的文件夹中。那么最佳的解决方法是什么?

提问于
用户回答回答于

这可以通过克隆到一个新目录,然后移动.git目录进入现有目录。

假设现有目录名为“code”。

git clone https://myrepo.com/git.git temp
mv temp/.git code/.git
rm -rf temp

这也可以在克隆命令期间不执行签出操作来完成;更多信息请点击这里

用户回答回答于
git clone repo-url tmp/
cp -R working/ tmp/

现在你有了所需的目标状态--新鲜克隆+本地更改。

用户回答回答于

使用了Git 1.7.7(clone--config选项),将当前目录转换为工作副本:

git clone example.com/my.git ./.git --mirror --config core.bare=false

这项工作是通过以下方式进行的:

  • 将存储库克隆为新的.git文件夹
  • --mirror将新的克隆放入纯元数据文件夹,如.git需要
  • --config core.bare = false反制--mirror选项的隐含的bare = true,从而允许存储库有一个关联的工作目录,并像一个普通的克隆

如果一个.git元数据目录已经存在于你想要变成工作副本的目录中,这显然不起作用。

用户回答回答于

有两种方法。 在可能的情况下,我会从新的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的代码,若要获得所有本地更改的副本,则可以重新应用这些更改并处理要提交的更改。

注意这两个示例都假设您从项目的父目录中的shell开始。

用户回答回答于

要将gitrepo克隆到一个空的现有目录中,请执行以下操作:

cd myfolder
git clone https://myrepo.com/git.git . 

注意.在你的最后git clone命令。它将把repo文件下载到当前的工作目录中。

用户回答回答于

在现有目录中签出master分支:

git init
git remote add origin [my-repo]
git fetch
git checkout origin/master -ft
用户回答回答于
git clone your_repo tmp && mv tmp/.git . && rm -rf tmp && git reset --mixed
用户回答回答于

可以使用临时目录,但是如果您想要避免这个步骤,这将是可行的。在工作目录的根目录中:

$ rm -fr .git
$ git init
$ git remote add origin your-git-url
$ git fetch
$ git reset --mixed origin/master
用户回答回答于

我会git clone到一个新目录中,并将现有目录的内容复制到新的克隆中。

用户回答回答于
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...

还有一个问题:如何找出您的树是基于哪一个提交的,因此需要重新设置到哪个位置。

扫码关注云+社区

领取腾讯云代金券