Git 推送到源主节点似乎成功,但没有任何变化

  • 本文关键字:成功 变化 任何 节点 Git git
  • 更新时间 :
  • 英文 :


我正在尝试推送到远程裸存储库。我成功地进行了本地提交,但是每当我推送到源/主时,更改都不会反映在远程存储库中。

$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
$ git push
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 360 bytes | 360.00 KiB/s, done.
Total 4 (delta 3), reused 0 (delta 0)
To <remote/path>
3a25c0d..fc7b327  master -> master
$ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean

编辑:我相信分支修复分离的HEAD是我创建的东西,试图在谷歌搜索后解决这个问题。

$ git remote -vvv
origin  <remote path> (fetch)
origin  <remote path> (push)

$ git branch -vvv
fix-detached-HEAD 47f1938 <commit message 1>
* master            fc7b327 [origin/master] <latest commit message>

编辑:远程裸确认:

$ git rev-parse --is-bare-repository
true

根据注释,您正在查看远程设备上的一些文件,这些文件要么不是存储库的一部分,要么是单独签出的一部分。这就解释了为什么它们没有更新,因为你使用远程上的对象而不是你正在查看的文件更新裸存储库。

如果您希望 git push 在远程服务器上实际部署文件,一种方法是在远程服务器上设置挂钩,如以下链接中所述:

  1. 创建钩子

    Hook 是一个程序,你可以放在钩子目录中,在 git 执行的某些点触发操作。

Git 有几个钩子,它可以在不同的阶段后自动调用。您将使用接收后钩子,该钩子在您的存储库收到推送代码后调用。

初始化 git 存储库后,新文件夹应该出现在/var/repo/website.git/中。导航到钩子并使用您喜欢的文本编辑器创建一个名为 post-receive 的新 bash。

CD 钩纳米接收后

在新创建的文件内部,您需要告诉 git 放在哪里 推送的文件。为此,请粘贴以下代码:

#!/bin/sh

git --work-tree=path_to_website_folder --git-dir=path_to_git_directory checkout -f name_of_branch

将path_to_website_folder替换为我们在第 3 点中创建的正确路径/var/www/website_folder。 将path_to_git_directory替换为裸 git 存储库的路径,在本例中为/var/repo/website.git。 name_of_branch是可选参数。如果未指定,则默认为 master。

您可以使用您选择的任何其他命令遵循该脚本, 例如重新启动服务器。

使用 ctrl+x 退出编辑器,并确保将文件另存为 接收后。

  1. 使脚本可执行

为了使操作系统执行脚本,后者 需要具有可执行权限。为此,请运行以下命令 命令:

chmod +x post-receive

服务器上的工作已完成。您现在只需运行即可注销 注销并点击返回

根据我们的聊天,最终的问题是你以一种奇怪的方式设置了遥控器,首先将源代码文件复制到其中,运行git init,然后将其转换为裸(并克隆为本地(。但是,在转换为裸文件时,您似乎忘记删除文件,因此当您推送并期望它们被更新时,它们并没有。Git 会忽略裸存储库中的错误文件,但会继续更新对象和其他组件。(正如jthill在评论中指出的那样,根据问题的修订版2收到了推送。

如果您确实希望源代码文件存在于远程上,请参阅 eis 的答案,但这是一种更高级的用法,作为新手,您可能只需要一个常规的裸存储库。为避免将来混淆,我可能会建议删除现有的遥控器并重新开始,但请先进行备份。

您的结果表明您实际上并没有推送到远程存储库。

$ git remote -vvv
<no results - blank>

您需要添加上游。

git remote add origin git@github.com:username/repo.git

然后再次检查git remote -v。你应该看到类似的东西

origin git@github.com:username/repo.git (fetch)
origin git@github.com:username/repo.git (push)

当您现在推送时,它应该转到该位置。

您可能还必须这样做

git push --set-upstream origin master

第一次。

而不是"git push",尝试"git push -u origin master"在这个 -u 代表更新可能是这可以解决你的问题。

最新更新