Git 签出远程分支

Git 签出远程分支,git,Git,我有一个远程git存储库,它的所有文件都与本地计算机上的未版本文件夹相同。我想将git跟踪添加到我的本地文件夹中,这样我就可以在进行更改时从远程回购中提取更改。我的本地文件夹与远程文件夹有一些不同之处,我不想丢失,但在其他方面是相同的 到目前为止,我已经做了: cd /my/local/copy/ git init git remote add origin [path to remote repo] git fetch origin master 这很好地工作了,现在我的本地文件夹引用了远程

我有一个远程git存储库,它的所有文件都与本地计算机上的未版本文件夹相同。我想将git跟踪添加到我的本地文件夹中,这样我就可以在进行更改时从远程回购中提取更改。我的本地文件夹与远程文件夹有一些不同之处,我不想丢失,但在其他方面是相同的

到目前为止,我已经做了:

cd /my/local/copy/
git init
git remote add origin [path to remote repo]
git fetch origin master
这很好地工作了,现在我的本地文件夹引用了远程repo。我现在的问题是本地文件夹没有签出分支。如果我尝试签出远程分支,git会拒绝,因为所有文件夹的内容都会被覆盖。如果我
git checkout-b master
,它会告诉我它已经“切换到新的分支‘master’”。好的,好的,现在我只需要跟踪远程分支,我是golden
git分支-u origin/master
应该可以做到这一点。Git回答,“致命:分支‘主’不存在”。它是在谈论起源/大师,还是我的新本地大师
git分支-u origin/master2
-我预计这会失败,但它会告诉我master git的意思。Git再次回应,“致命:分支‘master’不存在”。它说的是我在当地的分公司,它刚刚告诉我我已经成功结帐了

我想我的问题是本地
分支尚未正式创建。一旦我提交,它就会存在,但在添加远程跟踪之前,我不想提交。当然,我可能错了,可能是别的原因


如何从这一点开始,我的本地
master
跟踪
origin/master
,而不隐藏或移动所有本地文件或丢失我的本地差异?

根据您有多少差异,克隆repo然后在克隆上复制本地版本可能更简单,然后解决差异并提交

git clone <git-url> /new/repo/copy
cd /my/local/copy
tar cf - . | ( cd /new/repo/copy ; tar xf - )
git diff
git克隆/new/repo/copy
cd/my/local/copy
焦油cf-.|(cd/new/repo/copy;tar xf-)
差异比较

当然,这是假设您所说的repo“与我的本地计算机上的未版本化文件夹具有相同的所有文件”是准确的。

根据您的差异程度,克隆repo,然后在克隆上复制本地版本,然后解决差异并提交可能更简单

git clone <git-url> /new/repo/copy
cd /my/local/copy
tar cf - . | ( cd /new/repo/copy ; tar xf - )
git diff
git克隆/new/repo/copy
cd/my/local/copy
焦油cf-.|(cd/new/repo/copy;tar xf-)
差异比较
当然,这是假设您所说的repo“与我的本地机器上的未版本文件夹具有相同的文件”是准确的。

可以做您想做的事情(通过稍微偷偷摸摸,在git的背后操纵事情),但这样做更难。使用它要好得多

也就是说,这里有一个方法(我省略了开头的
cd
,只是为了避免命名目录);你已经基本上做到了:

$ git init
$ git remote add origin <url>
这几乎就是你所做的;关键区别在于,这将获取它们的所有分支,并将它们放在您自己的存储库中的
origin/*
名称空间中。因此,您现在可以参考
原点/master
。(使用额外的
master
参数,我认为即使当前的
git fetch
也不会创建新的
origin/master
,它只会在它存在时更新它。当然,它不会获取任何其他分支,尽管这还不是特别重要。)

在任何情况下,您现在都有一个“未出生的分支
master
”(因为这就是
gitinit
建立新的空存储库的方式)。您的第一个新提交将是根提交,使您的新分支成为主分支。虽然从那里继续下去是可能的,但我认为这将是不必要的困难

相反,现在我认为您应该创建一个本地分支
master
(作为“真正的分支”,而不是未出生的分支),引用与其
master
相同的提交ID:

$ git branch master origin/master
这应该在给定提交时(即,
上游/master
)和(2)创建本地
(1)和(2)作为“跟踪”
原点/master
(因为这种新分支的默认值是
--track

不过,您仍然有一个空索引,所以现在是填充它的时候了。我认为最简单的方法是使用当前的工作树。但是,我认为您可能也需要他们的
.gitignore
文件,所以至少让我们获取任何顶级文件(有更复杂的方法来查找子目录忽略,这可能也很好,但让我们使用简单的方法):

如果产生任何结果,请在重定向输出的情况下重复:

$ git show master:.gitignore > .gitignore
现在,
git添加
所有内容可能是最安全的:

$ git add .
现在您的索引/暂存区域已填满,足以使用
git status
来取得进展(例如,检查由于
.gitignore
文件丢失而不应该被暂存的内容;以及检查丢失的、显然已删除的文件)。

可以执行您想要的操作(可以说是在git背后鬼鬼祟祟地操纵事情)但这样做更难,使用起来更好

这就是说,这里有一个方法(我省略了开头的
cd
,只是为了避免命名目录);您基本上已经做到了:

$ git init
$ git remote add origin <url>
这几乎就是您所做的;关键区别在于,这将获取它们的所有分支,并将它们放在您自己的存储库中的
origin/*
名称空间下。因此,您现在可以参考
origin/master
。(使用额外的
master
参数,我认为即使当前的
git fetch
也不会创建新的
origin/master
,它只会在它存在时更新它。当然,它不会获取任何其他分支,尽管这还不是特别重要。)

在任何情况下,您现在都有一个“未出生的分支
master
”(因为这就是
git init
设置新的空存储库的方式)。您的第一个新提交将是根提交,