Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 有没有办法为每个文件指定标记并将其签出?_Git - Fatal编程技术网

Git 有没有办法为每个文件指定标记并将其签出?

Git 有没有办法为每个文件指定标记并将其签出?,git,Git,我是git的新手,不太确定如何问这个问题。我的工作仍然使用CVS,我开始推动我们远离它,但是我们有一个定制的构建服务器,根据任务跟踪系统确定的每个java类的最新签入版本,使用特定标记标记CVS签入。然后它根据标记签出每个文件。它允许我们根据标记为发布的任务来检查项目的版本。我很好奇这样的事情在git中是否可以实现,如果可以,这将如何实现。谢谢你的指点。我已经阅读了专业git书籍,但仍然不知道这是否可行。每个文件的标签:否。按标签签出:是 更具体地说,在git中,标记只是指定特定提交的另一种方式

我是git的新手,不太确定如何问这个问题。我的工作仍然使用CVS,我开始推动我们远离它,但是我们有一个定制的构建服务器,根据任务跟踪系统确定的每个java类的最新签入版本,使用特定标记标记CVS签入。然后它根据标记签出每个文件。它允许我们根据标记为发布的任务来检查项目的版本。我很好奇这样的事情在git中是否可以实现,如果可以,这将如何实现。谢谢你的指点。我已经阅读了专业git书籍,但仍然不知道这是否可行。

每个文件的标签:否。按标签签出:是

更具体地说,在git中,标记只是指定特定提交的另一种方式。每个提交都有一个“真实名称”,即40个字符的SHA-1值之一,如
676699a0e0cdfd97521f3524c76322f1c30a094
。这些真名对人类没有用处,因此我们给它们起了有意义的名字,要么标记分支尖端(例如,
master
),然后根据其与分支尖端的距离引用提交(例如,
master~3
将是“从尖端返回的第三次提交”),要么使用更静态的名称

树枝尖的名字在移动,这毕竟是它们的全部意义所在;如果我们永远不能将提交添加到
develope
中,然后将它们合并回
master
,那么拥有一个名为
master
的分支和另一个名为
develope
的分支将不会让我们有任何进展。所以我们也需要“不移动的名字”,这些是“标签”

要通过标记签出,只需执行以下操作:

git签出标记名

Git将查找相应的commit SHA-1并检查特定的提交,即将整个工作树恢复到提交时的状态(当然不包括未跟踪和忽略的文件)

Git也会给你一个关于“超脱的头”(听起来像是你被断头台了)的有点吓人的信息,但它实际上只是告诉你你不再是“在一个分支上”,如果你做出新的承诺,它们会工作得很好,但也不会是“在一个分支上”。因为提交是记录的,所以即使不是“在分支上”,它们也是半永久性的(它们会在日志条目过期之前停留一段时间),但它们可能很难找到,因为分支名称(当然还有标记!)是查找提交的简单方法


顺便提一下,作为CVS用户,您可能想知道如何签出文件
a
的标记版本“v1.3”,并将其与文件
B
的标记版本“v2.7”一起使用。您可以在git中执行此操作:首先签出“所有文件”所需的标记(假设所有文件都是v2.7),然后提取要还原的一个文件:

git checkout v2.7
git checkout v1.3 -- fileA 
您现在拥有了除fileA之外的“所有内容”的v2.7。但是,如果出于某种原因,这种组合是有用的,那么git的理念不是“用一种特殊的方式来检查它”,而是“现在就用它来提交,并给它起个名字”:


现在,您有了一个标签,可以用来命名“除fileA的v1.3之外的所有内容的v2.7”。它是一个提交,所以只要它有一个名称(我们刚刚给了它一个名称,
customerX
),它就是永久的。

每个文件的标签:否。按标签签出:是

更具体地说,在git中,标记只是指定特定提交的另一种方式。每个提交都有一个“真实名称”,即40个字符的SHA-1值之一,如
676699a0e0cdfd97521f3524c76322f1c30a094
。这些真名对人类没有用处,因此我们给它们起了有意义的名字,要么标记分支尖端(例如,
master
),然后根据其与分支尖端的距离引用提交(例如,
master~3
将是“从尖端返回的第三次提交”),要么使用更静态的名称

树枝尖的名字在移动,这毕竟是它们的全部意义所在;如果我们永远不能将提交添加到
develope
中,然后将它们合并回
master
,那么拥有一个名为
master
的分支和另一个名为
develope
的分支将不会让我们有任何进展。所以我们也需要“不移动的名字”,这些是“标签”

要通过标记签出,只需执行以下操作:

git签出标记名

Git将查找相应的commit SHA-1并检查特定的提交,即将整个工作树恢复到提交时的状态(当然不包括未跟踪和忽略的文件)

Git也会给你一个关于“超脱的头”(听起来像是你被断头台了)的有点吓人的信息,但它实际上只是告诉你你不再是“在一个分支上”,如果你做出新的承诺,它们会工作得很好,但也不会是“在一个分支上”。因为提交是记录的,所以即使不是“在分支上”,它们也是半永久性的(它们会在日志条目过期之前停留一段时间),但它们可能很难找到,因为分支名称(当然还有标记!)是查找提交的简单方法


顺便提一下,作为CVS用户,您可能想知道如何签出文件
a
的标记版本“v1.3”,并将其与文件
B
的标记版本“v2.7”一起使用。您可以在git中执行此操作:首先签出“所有文件”所需的标记(假设所有文件都是v2.7),然后提取要还原的一个文件:

git checkout v2.7
git checkout v1.3 -- fileA 
您现在拥有了除fileA之外的“所有内容”的v2.7。但是,如果出于某种原因,这种组合是有用的,那么git的理念不是“用一种特殊的方式来检查它”,而是“现在就用它来提交,并给它起个名字”:


现在,您有了一个标签,可以用来命名“除fileA的v1.3之外的所有内容的v2.7”。它是一个提交,所以只要它有一个名称(我们刚刚给了它一个名称,
customerX
),它就是永久的。

每个文件的标签:否。按标签签出:是

更具体地说,git中的标记只是另一种指定