无法恢复到GIT

时间:2017-09-26 15:23:26

标签: git

背景

我是git的新手,我正在测试它作为不在github上托管的网站的版本控制。我已经使public_html成为一个git repo并在public_html之外创建了一个裸仓库,我将所有提交和标记推送到。{1}}。我的目标是能够标记我对网站所做的更改,并可以选择在需要时快速恢复到以前的版本。到目前为止,通过我的测试,我已经能够通过使用resetcheckout后跟标记名称来恢复以前的版本来实现这一目标。

问题

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

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

更新1

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

  1. core.autocrlf设置为FALSE
  2. ,以防止不必要的EOL更改
  3. 正在运行git clean
  4. 不幸的是,这些建议并未解决问题。我还确定这个问题发生在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.php public_html文件夹中消失。

    现在,结帐v002

      $git checkout v002
    

    index.html 重新获得链接, phpinfo.php 重新显示在public_html

    然而,当我尝试去 phpinfo.php 时,我得到了&#34;内部服务器错误或配置错误&#34;页面加载。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

git reset --hard anOldTag
git clean -fd

添加 git clean 可确保生成的工作树仅包含SHA1(此处为标记)的文件重置或签出。
一定要在一个单独的站点中测试它,以便验证它不会远程太多文件!