0

在 git-hub 中有一个包含项目文件的现有仓库。

在新机器上,进入目标目录,例如 myproject,然后执行以下操作:

$ 混帐初始化

$ git 远程添加来源https://github.com/myco/myproj.git

$ git pull (这会下载很多文件)

$ ls(无文件)

$ git branch --set-upstream master origin/master

$ ls(无文件)

$ git status(显示所有文件都被标记为删除!)

我以前用过这个配方,不知道为什么签出一个 repo 会导致它删除所有 repos 文件。

如果我尝试在 git pull 之前执行 git 分支,则会出现错误。

我不能使用 git clone,因为最终,我需要将文件签出到一个 eisting 目录中,该目录已经有一些项目 donfig 文件(不在 git 中)。

有任何想法吗?

4

1 回答 1

1

如果这实际上是您遵循的命令的确切顺序,那么这里有一些注释可以帮助您了解您的位置:

$ git init

由于您似乎输入了一个空目录(在新机器上,...),这会在您当前目录之外创建一个新存储库。这个存储库没有对象,还没有master分支,没有提交,等等......

$ git remote add origin https://github.com/myco/myproj.git

这会添加您的原始存储库,应该不是问题。

$ git pull (this downloads lots of files)

这有两件事 -git fetch收集您的存储库当前具有但您的本地存储库没有的所有对象、分支等origin(即一切,因为您在当前空的存储库中),然后是git merge. 该merge阶段应该在这里失败,并显示“你没有告诉我你想要合并什么,所以我不打算这样做”的效果。

$ ls (no files)

对。您仍然没有检查任何内容,并且由于git merge上述失败,它从未达到更新您的工作目录的地步。

$ git branch --set-upstream master origin/master

现在您正在创建一个以上游为起点的master分支。origin/master但是,这不会检查分支,这会使您的工作目录保持与之前相同的状态,即为空。

$ ls (no files)

你还没有检查任何东西,所以这是意料之中的。

$ git status ( shows all the files are marked for deletion! )

git将您的空工作目录与它认为应该存在的目录进行比较,并确定您必须删除所有内容。

你真正想做的是:

$ cd directory/where/you/want/your/repository
$ git clone https://github.com/myco/myproj.git
$ cd myproj

然后,将您的其他项目配置文件复制到位。

如果您真的想以手动方式执行此操作,请使用git fetch而不是git pull,并在您的git branch ...行之后执行 a git checkout master(或 dogit checkout -b master origin/master代替该git branch ...行,这会在签出文件之前隐式执行分支设置)。

于 2013-08-29T15:45:06.687 回答