Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.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,因此,我有一个web项目,其中主机url是硬编码的,我只想不断更新一个分支,并且能够获得两个不同版本的代码,一个用于生产(服务器域),一个用于测试(本地主机) 我知道有很多方法可以通过编程实现,甚至可以通过配置文件或脚本实现。但我想知道是否可以用git实现 比如说 master-> commit 1 -> commit 2 ..... -> HEAD localhost/branch -> commit x (where url is differ

因此,我有一个web项目,其中主机url是硬编码的,我只想不断更新一个分支,并且能够获得两个不同版本的代码,一个用于生产(服务器域),一个用于测试(本地主机)

我知道有很多方法可以通过编程实现,甚至可以通过配置文件或脚本实现。但我想知道是否可以用git实现

比如说

master-> commit 1 -> commit 2 ..... -> HEAD
localhost/branch             -> commit x (where url is different) -> ... -> master head
因此,在本例中,在提交2之后,localhost/branch从master签出,并添加了提交x,然后继续跟踪master的头,因此每次提交到master时都会通过快速转发更新localhost/branch

有这样的事吗

简短回答:不

快进实际上是一种标签移动方式,并且以“是祖先”属性为条件:从commit Cold移动到Cnew的标签以快进方式移动,当且仅当Cold是Cnew的祖先时(请注意,当两个提交ID相等时,标识移动可以被视为快进,或者可以完全忽略,因为它实际上不是移动)

实际上,由于提交ID的散列包含它自己的所有祖先ID,如果您的“提交
x
on branch
localhost/branch
”在分支
master
的tip commit的祖先中不存在,那么添加到分支
master
的任何新commit都不能是commit
x
的后代,直到commit
x
本身被合并。此时,您必须保持配置更改(这样
master
就有了您不想要的配置更改)或放弃您的配置更改(这样
master
就可以根据您的意愿进行更改)。显然,您将选择后者,但这意味着,如果将标签
localhost/branch
移动到与标签
master
相同的提交位置,则
localhost/branch
也不会包含此配置更改

简而言之,为了合并分支,您将放弃在
x
中所做的更改,并且必须合并分支以使用快进标签移动

顺便说一句,如果您正确绘制提交链,这可能更有意义。它们总是在时间上指向向后,而不是向前,并且标签指向最新的:

请注意,
Cx
仍然不在
master
的历史记录链中,它现在从
C9
开始,返回到
C1
并停止,而不包括
Cx

您可以(强制)更改
localhost/branch
以直接指向
C9
,但如果这样做,它也不再包含
Cx


如果您希望维护这类内容,您需要做的是创建一个新的合并提交(或随时间的推移创建所需的数量),将
master
分支提交缝合到
localhost/branch
提交中:

C1 <- C2 ... <- C8      <-- HEAD=master
          \ ...  \
           Cx ... C8x   <-- localhost/branch
C1简短回答:否

快进实际上是一种标签移动方式,并且以“是祖先”属性为条件:从commit Cold移动到Cnew的标签以快进方式移动,当且仅当Cold是Cnew的祖先时(请注意,当两个提交ID相等时,标识移动可以被视为快进,或者可以完全忽略,因为它实际上不是移动)

实际上,由于提交ID的散列包含它自己的所有祖先ID,如果您的“提交
x
on branch
localhost/branch
”在分支
master
的tip commit的祖先中不存在,那么添加到分支
master
的任何新commit都不能是commit
x
的后代,直到commit
x
本身被合并。此时,您必须保持配置更改(这样
master
就有了您不想要的配置更改)或放弃您的配置更改(这样
master
就可以根据您的意愿进行更改)。显然,您将选择后者,但这意味着,如果将标签
localhost/branch
移动到与标签
master
相同的提交位置,则
localhost/branch
也不会包含此配置更改

简而言之,为了合并分支,您将放弃在
x
中所做的更改,并且必须合并分支以使用快进标签移动

顺便说一句,如果您正确绘制提交链,这可能更有意义。它们总是在时间上指向向后,而不是向前,并且标签指向最新的:

请注意,
Cx
仍然不在
master
的历史记录链中,它现在从
C9
开始,返回到
C1
并停止,而不包括
Cx

您可以(强制)更改
localhost/branch
以直接指向
C9
,但如果这样做,它也不再包含
Cx


如果您希望维护这类内容,您需要做的是创建一个新的合并提交(或随时间的推移创建所需的数量),将
master
分支提交缝合到
localhost/branch
提交中:

C1 <- C2 ... <- C8      <-- HEAD=master
          \ ...  \
           Cx ... C8x   <-- localhost/branch
C1简短回答:否

快进实际上是一种标签移动方式,并且以“是祖先”属性为条件:从commit Cold移动到Cnew的标签以快进方式移动,当且仅当Cold是Cnew的祖先时(请注意,当两个提交ID相等时,标识移动可以被视为快进,或者可以完全忽略,因为它实际上不是移动)

实际上,由于提交ID的散列包含它自己的所有祖先ID,如果分支
localhost/branch
“提交
x
”不存在于分支
ma的tip提交的祖先中
C1 <- C2 ... <- C8      <-- HEAD=master
          \ ...  \
           Cx ... C8x   <-- localhost/branch
C1 <- C2 ... <- C8 <- C9      <-- HEAD=master
          \ ...   \     \
           Cx ... C8x <- C9x  <-- localhost/branch