1

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

  1. 进行了更改
  2. 暂存文件
  3. 在本地提交更改
  4. 推送到远程源/主

成绩单一直说“一切都是最新的”,但没有任何已提交的更改出现在远程分支中。(SSH 和查看目录仅显示 .git 文件夹,没有推送的更改。)

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

master 分支在本地签出。

更新

根据下面的讨论,我认为澄清最初的意图是谨慎的......

遥控器旨在成为一个实时站点,因此不需要一个裸仓库,并且在遥控器上需要一个工作树,但仍然需要促进“推送”更新的能力。

对于这种特殊情况,另请参阅下面我的回答......

4

4 回答 4

4

推送到一个 repo 不会改变 repo 的工作树,即使它有一个。但是,裸仓库没有工作树,而且通常您只会推送到裸仓库。

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

于 2013-03-09T01:04:01.727 回答
2

我阅读了这种行为,发现在“推送”操作期间不更新远程工作树是一个深思熟虑的设计决定:

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

于 2013-03-09T16:17:38.420 回答
1

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

于 2013-03-09T01:08:53.160 回答
0

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

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

而且由于需要一个裸仓库才能推送到,因此 Apache 需要一个独立的工作树才能真正充当实时站点。

我不确定这是否是最佳实践,但要做到这一点,你基本上可以......

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

  1. 使用实时站点的工作目录创建一个 repo
  2. 创建一个单独的裸仓库
  3. 使裸仓库成为实时仓库的远程,并将实时主机推送到它
  4. 在主存储库和裸存储库之间创建挂钩(脚本)以保持它们同步

我对 Git 中的 hooks 概念不熟悉,所以我不会进一步详细说明,因为害怕进一步的大吃大喝,所以我向您推荐源代码:

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

于 2013-03-09T12:58:08.777 回答