我从unable to create file ... Permission denied看到了一个git命令
git checkout origin develop
我只知道签出本地分支机构。将远程存储库和远程分支作为签出的参数是什么意思?我在https://git-scm.com/docs/git-checkout
中找不到答案 0 :(得分:3)
命令insertNAcol <- function(DF, every = 2, na.cols = 4){
n <- ncol(DF)
tmp <- DF[1]
tmp[2:(1 + na.cols)] <- NA
tmp <- tmp[-1]
m <- n %/% na.cols
res <- DF[1:every]
for(i in seq_len(m)[-1]){
DF2 <- DF[(every*(i - 1) + 1):(every*i)]
res <- cbind.data.frame(res, tmp, DF2)
}
res <- cbind(res, tmp, DF[(n - every + 1):n])
res
}
insertNAcol(dataset)
insertNAcol(dataset, 3, 3)
的意思是“从分支(分支,而非远程)中检出名为git checkout origin develop
的文件(文件,而不是分支!”) !)名为develop
”。如果您有分支origin
,并且该分支指向包含文件origin
的提交,则命令成功。
但是您可能都没有,所以该命令实际上没有任何意义。 StackOverflow充满了错误的问题和错误的答案;不要相信您看到的一切。
此处的一个有意义的命令可能是develop
,这意味着“检出名为git checkout origin/develop
的远程跟踪参考所指向的提交”。
此处另一个有意义的命令可能是origin/develop
,这意味着“创建一个名为git checkout develop
的新本地分支,该分支从名为develop
的远程跟踪引用中分支;请设置跟踪,以便远程跟踪引用名为origin/develop
的文件将成为名为origin/develop
的本地分支的上游分支。
请参阅https://git-scm.com/docs/git-checkout的develop
文档
答案 1 :(得分:2)
命令git checkout origin develop
没有多大意义,因为在Git中仅签出本地分支。使用origin develop
是指遥控器上的develop
分支。您可能打算这样做:
git checkout develop
假设存在一个远程跟踪分支origin/develop
(实际上是一个本地分支),则上面的内容将告诉Git创建一个名为develop
的新本地分支,该分支将通过跟踪分支origin/develop
。
答案 2 :(得分:2)
您没有在这里既有存储库又有分支。相反,您有一个 tree-ish 和一个 pathspec 。 tree-ish 是一个提交说明符origin
,它是origin/HEAD
的缩写,而develop
则是...的简称,请参见下文。 pathspec 是develop
,仅表示名为git checkout [-q] [-f] [-m] [<branch>]
的文件。如果没有这样的文件,此命令将仅失败。
git checkout [-q] [-f] [-m] --detach [<branch>]
git checkout [-q] [-f] [-m] [--detach] <commit>
git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new_branch>] [<start_point>]
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>...
git checkout [<tree-ish>] [--] <pathspec>...
git checkout (-p|--patch) [<tree-ish>] [--] [<paths>...]
git checkout origin develop
这些都不允许您指定分支名称两次。
尝试匹配:
<branch>
以上七个可能的语法行。它与#1不匹配,后者仅允许一个--detach
自变量,而没有其他自变量。它与#2不匹配,后者需要文字<commit>
。它与#3不匹配,后者仅允许一个<start-point>
参数,而没有常规参数。它与#4不匹配,后者仅允许一个可选的-p
参数,而与#7不匹配,后者需要一个文字--patch
或git checkout [<tree-ish>] -- [<pathspec> ...]
。
它确实匹配#5和#6。这些可能不应该是两个单独的语法行,而在随后的description section中,它们不是—只是其中的一部分:
-f
的缺点是在简短的摘要中没有提及所有可选标志,但随后在正文中提到了这些标志:
通过替换内容覆盖工作树中的路径 在索引或
中(通常是一次提交)。当一个 给出 ,与 匹配的路径是 在索引和工作树中都进行了更新。 由于先前失败,索引可能包含未合并的条目 合并。默认情况下 ... [片段-这是
--ours
和origin
等标记被提及的地方]
现在,此文本充满了Git术语,尤其是 tree-ish 和 pathspec 。 (附带说明: tree-ish 是在Gitglossary中定义的,但是我将在此处使用更明确的定义。)
术语 tree-ish 的意思是:我,Git,如果您命名特定的提交,在这里很好。我要做的只是查找其内部树对象,因此,如果出于某些奇怪的原因,您真的可以直接给我。但是实际上,只要给我一些东西,我就可以将其转换为提交或树,然后我将使用该树,或者使用提交来查找树。
您在此处提供了master
,现在是时候看看另一篇Git文档了。 (什么,另一个一个?已经?)The gitrevisions documentation描述了一个六步的过程来转换一个名字,例如develop
或{{1} }或v2.1
转换为Git对象哈希ID。
第一步是检查.git
中是否有一个具有该名称的文件,该步骤使您可以在CHERRY_PICK_HEAD
处于冲突{ {1}}。在这种情况下,它不适用。
第二步是尝试将名称命名为git cherry-pick
。第二步使您可以在使用refs/name
时使用stash
或stash@{number}
。在这种情况下,它也不适用。
第三步是尝试使用git stash
作为名称。第三步使您可以使用refs/tags/name
之类的名称来引用 tag v2.1
。由于v2.1
可能不是一个有效的标记名-您没有标记任何提交origin
,对吗?-此步骤将失败,因此Git将继续执行步骤#4。
第四步是尝试使用origin
作为名称。此步骤允许您使用分支名称来指定提交。例如,这就是让您refs/heads/name
的原因。由于git checkout master -- somefile
是有效的分支名称,因此master
将找到git checkout
命名的特定提交(即master
分支的尖端)并使用该提交的树-请记住,我们正在执行master
语法,并在此处处理git checkout <tree-ish> [--] <pathspec>...
部分。
但是您没有名为<tree-ish>
的分支,对吗?如果您创建了一个,那么您可能会!我建议不要创建一个,但是,如果这样做了,那么这六个步骤的过程就会停止。不过,假设您没有,则过程继续进行到第五步。
第五步将名称尝试为origin
。您 将有一个名为refs/remotes/name
的目录,但这不是有效的引用,因此第五步将失败,该过程将移至最后一步。如果最后一步失败了,那么整个事情都会失败,但是...
第六步,最后一步,尝试将名称命名为refs/remotes/origin/
。由于refs/remotes/name/HEAD
是有效的遥控器,因此该将存在(嗯,除非您专门删除了它,否则在其他情况下将不会发生),并且将会 >成为有效的提交说明符。这样,第六步成功了:它发现origin
存在,并且(可能)还命名了refs/remotes/origin/HEAD
,并且 命名了一个提交。
因此,这时满足了整个过程的refs/remotes/origin/master
部分:Git已将<tree-ish>
转换为origin
或简称为refs/remotes/origin/HEAD
; (可能)与origin/HEAD
相同,或简称为refs/remotes/origin/master
;这是有效的提交,可用于origin/master
语法规则#3或git checkout
语法规则#5&#6。
由于我们正在处理#5 /#6规则,因此我们可以继续将 last 参数git checkout
视为develop
。现在,我们必须看看另一份Git文档,即the Gitglossary。我们可以直接跳到the definition of a pathspec,不幸的是,这很长,我在这里不做所有介绍。
总而言之,可以指定一个路径规范 ,在这种情况下,是,只是一个文件名。因此<pathspec>
成为一个文件名,我们已经完成了对语法规则#5 /#6的所有要求。 Git将执行上面黄色引号中所述的操作,替换索引和工作树中的文件develop
,或者如果文件develop
中不存在该名称的文件develop
,则直接出错。我们选择的名称为<tree-ish>
的commit / origin
。