Git&部署:本地更改已暂存,已提交和推送,未在远程上显示

时间:2013-03-09 00:53:22

标签: git deployment version-control repository

我知道这看起来很常见,但我已经用Google搜索并搜索了这个,但我见过的大多数回复似乎只是告诉我做我已经做过的事情......

  1. 做出改变
  2. 分阶段文件
  3. 本地提交更改
  4. 推送到远程起源/主人
  5. 成绩单一直说“一切都是最新的”,但没有任何提交的更改出现在远程分支中。 (SSH和查看目录只显示.git文件夹,而不显示任何推送的更改。)

    遥控器是一个空的回购设置为裸(# git config --bool core.bare true)。

    主分支在本地检出。

    更新

    根据下面的讨论,我认为澄清原始意图是明智的......

    遥控器应该是一个实时站点,因此不需要裸露的回购,并且遥控器上需要一个工作树,但仍然需要“推动”更新的能力仍然是可取的。

    另请参阅下面我对此特定案例的回答......

4 个答案:

答案 0 :(得分:4)

推送回购并不会改变该回购工作树,即使它有一个。但是,一个裸的仓库没有工作树,通常你只会推送到裸仓。

换句话说,推送到另一个仓库将从不更改与该远程相关的任何文件,除了.git目录中存储所有仓库数据的文件。

答案 1 :(得分:2)

我读到了这种行为并发现这是一个故意的设计决定,不在“推”操作期间更新远程工作树:

我通常不使用远程工作树(裸存储库)但是如果你使用Git进行部署,这个功能显然会造成一些痛苦。值得庆幸的是,有一个解决方案使用提交挂钩来触发树更新。参见:

答案 2 :(得分:1)

我sugest,删除了远程repo dir,mkdir新的,执行git init --bare,然后再试一次。然后检查ssh到服务器,转到repo目录并执行git log,你应该在那里看到你的更改。

答案 3 :(得分:0)

注意:此答案包含在OP中的特定案例中。其他答案在一般情况下很有用。

正如@Ryan Stewart正确地指出的那样,推送不会更新工作树(在OP的情况下实际站点的实际内容),但是一个裸的回购没有工作树。

由于需要一个简单的回购才能推送到,所以Apache需要一个独立的工作树才能真正作为实时站点提供服务。

我不确定这是否是最佳做法,但为了做到这一点,你基本上可以......

在服务器上执行此操作(与本地克隆分开):

  1. 使用实时网站的工作目录创建一个仓库
  2. 创建一个单独的裸仓库
  3. 将裸露的仓库设为现场仓库的远程仓库,并将实时主仓推送给它
  4. 在主存储库和裸存储库之间创建挂钩(脚本)以使它们保持同步
  5. 我对Git中钩子的概念不熟悉,所以我不会进一步详细说明,因为害怕进一步嬉戏,所以我推荐你来源:

    http://git-scm.com/book/en/Customizing-Git-Git-Hooks

相关问题