我正在尝试推送到远程裸存储库。我成功地进行了本地提交,但是每当我推送到源/主时,更改都不会反映在远程存储库中。
$ 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 在远程服务器上实际部署文件,一种方法是在远程服务器上设置挂钩,如以下链接中所述:
创建钩子
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 退出编辑器,并确保将文件另存为 接收后。
- 使脚本可执行
为了使操作系统执行脚本,后者 需要具有可执行权限。为此,请运行以下命令 命令:
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 代表更新可能是这可以解决你的问题。