我有一个项目的工作副本,没有任何源控制元数据。现在,我想把git-clone复制到这个文件夹中,并保留我的本地更改。

Git-clone不允许我克隆到现有的文件夹。这里的最佳实践是什么?


当前回答

这是我遇到的所有方法中最好的

只克隆存储库的.git文件夹(不包括已经在exists -dir中的文件)到一个空的临时目录

Git clone——no-checkout repo-path-to clone exists -dir/ exists -dir.tmp //可能需要——no-hardlinks用于克隆本地repo

将.git文件夹移动到文件所在的目录。 这使得exists -dir成为一个git回购。

mv existing-dir / existing-dir.tmp /。git existing-dir /

删除临时目录

删除目录existing-dir / existing-dir.tmp cd existing-dir

Git认为所有文件都被删除了,这将回购的状态恢复到HEAD。

警告:对文件的任何本地更改都将丢失。

git重置-混合头部

其他回答

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

只要用。在git克隆命令的最后(在那个目录下),像这样:

cd your_dir_to_clone_in/
git clone git@github.com/somerepo/ .
git init
git remote add origin git@github.com:<user>/<repo>.git
git remote -v
git pull origin master

有两种方法。在可能的情况下,我会为你的新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开始。

如果您正在克隆相同的存储库,那么在现有的存储库中运行以下代码片段

git pull origin master