Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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新手,我正在测试它作为一个不在github上托管的网站的版本控制。我已经将public\u html作为git回购,并在public\u html之外创建了一个裸回购,我将所有提交和标记都推送到该回购。我的目标是能够标记我对网站所做的更改,并在需要时可以选择快速恢复到以前的版本。到目前为止,我已经能够通过使用reset或checkout以及标记名返回到以前的版本来完成测试 问题 当我创建涉及从以前的标记中删除文件的新版本标记时,我会遇到问题。如果我尝试重置到或签出文件曾经存在且正常工作

我是git新手,我正在测试它作为一个不在github上托管的网站的版本控制。我已经将
public\u html
作为git回购,并在
public\u html
之外创建了一个裸回购,我将所有提交和标记都推送到该回购。我的目标是能够标记我对网站所做的更改,并在需要时可以选择快速恢复到以前的版本。到目前为止,我已经能够通过使用
reset
checkout
以及标记名返回到以前的版本来完成测试

问题 当我创建涉及从以前的标记中删除文件的新版本标记时,我会遇到问题。如果我尝试
重置
到或
签出
文件曾经存在且正常工作的上一个标记,这些页面的访问请求将返回“内部服务器错误”。我知道文件在那里,因为我看到它们重新出现在
public\u html
文件夹中(刷新cpanel或filezilla时看到的)。如果我下载这些文件,从我的网站上删除git,然后将它们添加回
public_html
文件夹,它们工作正常,表明文件没有被修改或损坏。此外,当在文件确实被删除的标记处,我会得到一个“未找到页面”的结果

这是一个普遍的问题吗?任何提示、建议或解决方法都将不胜感激

更新1 基于@VonC的善意建议,我尝试了

  • 通过将
    core.autocrlf
    设置为
    FALSE
    来防止不必要的EOL更改
  • 正在运行git clean
  • 不幸的是,这些建议没有解决这个问题。我还确定这个问题发生在PHP文件中,而不是HTML。我一直在自己阅读,但我还没有发现任何类似问题的报道。我希望很快就能解决这个问题。目前,如果我最终删除了文件并对此感到遗憾,我将无法恢复到以前的版本,这基本上是我希望从git获得的主要好处之一

    另外,我很好奇git是否修改了权限,但我已经检查过了,它们没有改变

    更新2 我想如果我指定了我尝试过的所有方法,以防有人试图重新创建问题,可能会有所帮助

    $git init --bare bare_repo.git
    $cd public_html
    $git init
    $git remote add origin ../bare_repo.git
    $git add index.html # simple testing only "hello world" 
    $git add commit -m "index.html"
    $git tag -a v001 -m "v001"
    $git push origin master --tags
    
    现在添加一个PHP文件:

    $git add phpinfo.php # again for testing only, includes <?php  phpinfo(); ?>
    $git add index.html  #file changed to include link to phpinfo.php
    $git commit -m "phpinfo.php"
    $git tag -a v002 -m "v002"
    $git push origin master --tags
    
    index.html返回到原始状态,没有链接,phpinfo.php从
    public\u html
    文件夹中消失

    现在,签出
    v002

      $git checkout v002
    
    index.html重新获得链接,phpinfo.php重新出现在
    public\u html


    但是,当我尝试转到phpinfo.php时,我会看到“内部服务器错误或配置错误”页面加载。

    尝试更严格的方式重置或签出:

    git reset --hard anOldTag
    git clean -fd
    
    添加将确保生成的工作树只包含来自SHA1(此处为标记)重置或签出的文件。

    一定要在一个单独的站点上对它进行测试,以验证它不会远程发送太多的文件

    我发现问题与GIT在签出或重置操作后修改权限有关。它将文件从664更改为644,从而启用组写入。虽然我考虑过权限变更,但我没有意识到这一点。HTML和PHP文件都会出现这种情况,但这只是PHP文件的一个问题。快速搜索表明这个问题存在解决方案,所以这只是选择最佳方法的问题。谢谢VonC花时间考虑我的问题。 谢谢你回答我的问题。很遗憾,这不起作用。@joe5在服务器上键入git config--global core.autocrlf false后重试。(作为运行web服务器的帐户完成)。在客户端也这样做(你的账户在这些文件上也会被打上标记)。再次尝试删除全部git,然后将其添加回。然后在以后结账时查看问题是否仍然存在。感谢您的跟进。我试过这个,但不幸的是我仍然有同样的问题。有趣的是,我发现它是特定于php文件的,但不会出现在HTML文件中+1.或者可能有帮助。
    git reset --hard anOldTag
    git clean -fd