【问题标题】:Pushing Git Repo to Remote Server将 Git 存储库推送到远程服务器
【发布时间】:2012-09-21 08:57:22
【问题描述】:

所以我正在尝试将一个 repo 从我的本地主机推送到我的 VPS。

我在我的 vps 上设置了一个 --bare repo,在我的 localhost 上设置了一个 repo。

我已经使用以下命令推送到 VPS:

# git remote add origin ssh://root@mysite.net/home/mysite/public_html/mygit/.git
# git push origin master

它推送成功,但我需要做的是从 VPS .git 签出文件。但是,当我尝试运行“git checkout”时出现错误:

致命:此操作必须在工作树中运行

我已尝试编辑 .git 配置文件并编辑/添加这些行:

[core]
bare = true
worktree = /home/mysite/public_html/mygit/

[receive]
denycurrentbranch = false

这允许我运行 git 命令,但文件不会签出,并且 git 告诉我文件已被删除。

我只是有点困惑。我该怎么办?

【问题讨论】:

  • 您是在克隆上运行这些命令 - 还是在您的裸仓库上运行?
  • 我在我的 VPS 上的一个裸仓库上运行命令。

标签: git ssh


【解决方案1】:

尝试在裸存储库上执行签出是非常不合逻辑的 - checkout 是用于更新工作副本/树的命令:

git-checkout - 签出工作树的分支或路径

裸存储库没有工作树。

以正常方式设置你的 git repos

所以从零开始,假设您在家里/办公室的计算机上:

创建裸仓库

为您的项目创建一个裸仓库 - 或将您现有的仓库移动到某个适当的位置:

ssh root@mysite.net
cd repos
mkdir repo.git ##give it a better name
cd repo.git
git init --bare

为您的网站制作克隆

ssh root@mysite.net
cd /home/mysite/public_html
git clone ~/repos/repo.git .

创建本地克隆

cd mylocalsite/public_html
git clone root@mysite.net:repos/repo.git .
git push/pull etc.

自动更新网站

由于您的目标是自动更新,因此您可以使用 git-hooks 来更新您的实时站点的工作副本,只要您推送到您的存储库。

这里是a simple example

#!/bin/sh
cd /home/mysite/public_html
git --git-dir /home/mysite/public_html/.git pull > /dev/null

将其保存为/home/root/repos/.git/hooks/post-receive,使其可执行,每次推送时,它都会尝试通过发出拉取更新您的实时站点

您可以放弃使用裸存储库并使用您的实时站点的结帐作为您的主要/唯一存储库。这是不推荐,但如果您选择这样做,您会这样做:

git remote add live root@mysite.net:/home/mysite/public_html/.git
git push live master

它会给你一个关于更新当前签出分支的错误,阅读警告并理解它的含义。如果您决定仍要这样做,您可以允许它使用:

ssh root@mysite.net
cd /home/mysite/public_html
git config receive.denyCurrentBranch ignore

再次不推荐,最好有一个裸仓库并将您的实时网站维护为正常结帐。

【讨论】:

  • 感谢您的详细回复。我现在要试一试。
  • 好的,我已经完成了从本地到服务器的推送工作。现在,我如何从服务器上的 repo 中签出文件?
  • 我在尝试推送时收到此消息:stdin: is not a tty /root/.bashrc: line 13: export: `PATH/root/local/bin:/usr/local/jdk/ bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/X11R6/bin': 无效标识符一切都是最新的
  • 听起来你在做一些很奇怪的事情 - 请注意,错误来自你的 .bashrc 文件,看起来与你的问题无关。如果您需要动手帮助,我建议在 freenode 上使用 SO chat 或#git。
  • @AD7six 我在 VPS 上有 node.js 应用程序。我是否使用这些相同的命令从 github 自动更新我的节点应用程序?因此,我的 .git 文件位于 /root/mynodeproject/.git 中,而不是 public_html。我需要进行哪些更改才能使我的东西正常工作?
猜你喜欢
  • 1970-01-01
  • 2018-03-02
  • 2021-04-18
  • 2018-06-24
  • 2010-10-25
  • 1970-01-01
  • 2015-08-22
  • 2011-02-28
相关资源
最近更新 更多