【问题标题】:trouble reverting to previous tags in GIT在 GIT 中恢复到以前的标签时遇到问题
【发布时间】:2017-09-26 15:23:26
【问题描述】:

背景

我是 git 的新手,我正在测试它作为不在 github 上托管的网站的版本控制。我已将public_html 设为 git 存储库,并在 public_html 之外创建了一个裸存储库,我将所有提交和标签推送到该存储库。我的目标是能够标记我对网站所做的更改,并可以在需要时快速恢复到以前的版本。到目前为止,通过我的测试,我已经能够通过使用resetcheckout 后跟标签名称返回到以前的版本来完成此操作。

问题

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

这是一个常见问题吗?任何提示、建议或解决方法将不胜感激。

更新 1

基于@VonC 的善意建议,我已经尝试过

  1. 通过将 core.autocrlf 设置为 FALSE 来防止不必要的 EOL 更改。
  2. 正在运行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

现在,结帐v001

 $git checkout v001 

index.html 在没有链接的情况下返回原始状态,phpinfo.phppublic_html 文件夹中消失。

现在,结帐v002

  $git checkout v002

index.html 重新获得链接,phpinfo.php 重新出现在public_html

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

【问题讨论】:

    标签: git


    【解决方案1】:

    我发现问题与 GIT 在结帐或重置操作后修改权限有关。它将文件从 664 更改为 644,从而启用组写入。尽管我考虑过权限更改,但我错过了这种情况的发生。 HTML 和 PHP 文件都会发生这种情况,但它仅表现为 PHP 文件的问题。快速搜索表明此问题存在解决方案,因此它只是选择最佳方法的问题。感谢@VonC 花时间考虑我的问题。

    【讨论】:

    【解决方案2】:

    尝试更严格的重置或结帐方式:

    git reset --hard anOldTag
    git clean -fd
    

    添加 git clean 将有助于确保生成的工作树仅包含来自 SHA1(此处为标签)重置或签出的文件。
    请务必在单独的站点中对其进行测试,以验证它不会远程太多文件!

    【讨论】:

    • 感谢您回答我的问题。不幸的是,这不起作用。
    • @joe5 在服务器上键入 git config --global core.autocrlf false 后重试。 (作为运行 Web 服务器的帐户完成)。在客户端也这样做(就像您在这些文件上的帐户一样)。再试一次 all delete git,把它们加回来。然后查看问题是否在以后结帐时仍然存在。
    • 感谢您的跟进。我试过这个,但不幸的是我仍然有同样的问题。有趣的是,我发现它特定于 php 文件,但不会出现在 HTML 文件中。
    猜你喜欢
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 2011-06-27
    • 2013-02-08
    相关资源
    最近更新 更多