--exec-path
Path to wherever your core git programs are installed.
This can also be controlled by setting the GIT_EXEC_PATH
environment variable. If no path is given, git will print
the current setting and then exit.
采购您的新~/.bashrc. 现在尝试运行git。
这是它第一次给我的:
> git
git: error while loading shared libraries: libcrypto.so.4: cannot open shared object file: No such file or directory
> warning: updating the current branch
> warning: Updating the currently checked out branch may cause confusion,
> warning: as the index and work tree do not reflect changes that are in HEAD.
> warning: As a result, you may see the changes you just pushed into it
> warning: reverted when you run 'git diff' over there, and you may want
> warning: to run 'git reset --hard' before starting to work to recover.
> warning:
> warning: You can set 'receive.denyCurrentBranch' configuration variable to
> warning: 'refuse' in the remote repository to forbid pushing into its
> warning: current branch.
> warning: To allow pushing into the current branch, you can set it to 'ignore';
> warning: but this is not recommended unless you arranged to update its work
> warning: tree to match what you pushed in some other way.
> warning:
> warning: To squelch this message, you can set it to 'warn'.
> warning:
> warning: Note that the default will change in a future version of git
> warning: to refuse updating the current branch unless you have the
> warning: configuration variable set to either 'ignore' or 'warn'.
$ git remote add godaddy ssh://[email protected]//home/content/u/n/c/unclecj/foo.git
$ git push godaddy master
bash: git-receive-pack: command not found
fatal: The remote end hung up unexpectedly
$ git push --receive-pack="/home/content/u/n/c/unclecj/opt/git-1.6.3/bin/git-receive-pack" godaddy master
/home/content/u/n/c/unclecj/opt/git-1.6.3/bin/git-receive-pack: error while loading shared libraries: libcrypto.so.0.9.8: cannot open shared object file: No such file or directory
fatal: The remote end hung up unexpectedly
我在 HostNine 共享主机包上托管的网站遇到了同样的问题。他们也给你
ssh
访问权限,但不幸的是他们没有git
安装,甚至不给你访问权限 rungcc
,这使得为你的用户下载和安装 git 相当困难。我能想到的解决这些限制的唯一方法是从另一台拥有它们的计算机上复制 git 二进制文件。也许相同的解决方案适用于您和您的 GoDaddy 共享主机。这是我所做的:
首先弄清楚你的服务器有什么架构。就我而言,它是 32 位 (i386)。这里有几种方法可以解决这个问题:
接下来,您需要找到另一台运行 Linux 且具有相同架构并安装了 git 的计算机。它们甚至不必运行相同的 Linux 发行版或版本,只要它们具有相同的体系结构并且您可以找到所需的二进制文件和库文件。
要查找主 git 二进制文件的位置:
其他一些重要的二进制文件(如
git-receive-pack
)也位于同一目录中,因此我建议您只复制所有文件/usr/local/bin/git*
以确保获得所需的一切。其他重要的文件是 git 所依赖的文件位于源系统某处的“libexec”目录下。如果您不复制这些内容,当您尝试执行 a 时,您可能会收到一条令人惊讶的错误消息
git push
,就像我做的那样:要在 target_host 上找到包含核心 git 库的目录,可以使用以下命令:
我建议先复制这些文件,然后尝试运行 git 以查看它是否抱怨缺少任何共享库。如果没有,那么你(大概)很好。如果是这样,请继续阅读。(如果共享库已经存在于目标主机上并且是正确的版本,则无法复制它们。)
scp
您可以使用、rsync
、ftp
或任何您喜欢的方式复制文件。我用过scp
,是这样的:然后 ssh 到 target_host。您需要在您的
~/.bashrc
:如果您忘记了这一步,您可能会在执行以下操作时惊讶地看到此错误
git push
:这记录在 git.or.cz 上的 Git 常见问题解答中:
GIT_EXEC_PATH
记录在man git
:采购您的新
~/.bashrc
. 现在尝试运行git
。这是它第一次给我的:
通过在源计算机上运行它,我能够找出要复制的共享库的位置:
就我而言,我只需要复制
/lib/libcrypto.so.4
到~/lib
我的target_host
,一切都很好。现在您应该可以
git
在共享托管服务器上运行,并且应该能够推送到它!现在您需要在您的服务器上创建一个新的 git 存储库和工作树,或者复制您现有的存储库/工作树。
顺便说一句,在这种情况下,我认为裸存储库不是您想要的服务器,因为您说您想要部署实际的内容文件(而不仅仅是
config HEAD objects/ refs/
将包含在裸存储库中的文件)你做一个git push
。toolmantim.com解释了常规 git 存储库和裸存储库之间的区别:
我暂时假设您已经在
target_host
要部署网站的位置(或您正在部署的任何位置)上创建了一个目录。我们称之为目录~/www/my_site
。您甚至可能已将所有文件通过 ftp 传输到~/www/my_site already
. (您是否拥有并不重要。)我还假设您尚未将 .git 子目录复制到~/www/my_site
(如果有的话,它应该可以正常工作)。由于在 target_host 上还没有初始化 git 存储库,因此您的第一步是创建一个:
然后,无论哪个主机拥有您想要部署的最新更改的存储库(我猜是您的开发框),您只需要执行以下操作即可部署:
target_host
如果您的存储库不是最新的,您可能会看到这样的警告:(我认为,在正常
git
使用中,您永远不会看到该消息,因为您通常会推送到裸存储库。但是由于在这种情况下我们的远程存储库是具有工作树和索引的正常存储库,git
因此可以理解它可能搞砸了。)不过,我认为我们在您的服务器上将其设置为“忽略”是安全的,因为您不太可能直接向那里的存储库进行任何提交。(所有提交可能应该源自您的开发存储库,然后被推送到服务器。)
所以继续设置这个,这样你每次推送时都不会看到警告:
它
push
本身只更新索引,而不是工作树本身中的文件。但是,更新这些文件只是我们尝试做的全部工作,所以我们的工作直到我们告诉git
将索引的内容写出到工作树本身时才完成,如下所示:(注意:您在服务器上的工作树中所做的任何更改都将被存储库中的内容覆盖。)
我还按照 mattikus 的建议为我的服务器创建了一个遥控器:
所以现在我要做的就是部署:
我什至将这些命令放入我命名的脚本中,
script/deploy
这样每当我想部署时,我只需运行一个命令。如果您在这些说明中发现任何错误或您知道更好的解决方案,请告诉我。
我既是SF又是godaddy n00b,所以请多多包涵,但无论如何,我很高兴看到这里讨论这个问题。
就我的 0.02 美元,我尝试在我的 linux 机器上构建 git(动态),将其存储到我的 godaddy 帐户,即使只是尝试推送到其他被动的 godaddy 机器,它也会由于缺少 openssl 而失败。也许如果我尝试使用 openssl 静态构建 git,但这感觉也是个坏主意。
题外话,但是这是我应该期望从godaddy那里得到的那种缺乏支持,我应该后悔没有选择dreamhosts吗?
最好的问候 CJ
PS。不是一个答案,而是一个建议,一旦 git-receive 在 godaddy 上工作(是吗?),那么带有分离工作树的存储库是部署 web 的好方法:http: //toroid.org/ams/git-网站指南
最简单的方法是在远程服务器上运行类似的东西:
然后在您的开发结帐时:
不需要服务器或其他任何东西,只要您具有 ssh 访问权限,您就应该能够从该机器获取/拉取。
如果您也设置了 .ssh/config,它应该利用它并使用您可能设置的任何私钥。
如果你计划大量推出更新,你可以在你的开发结账中添加一个远程仓库:
然后从那时起,您可以:
有关更多信息,请查看在线文档
git push
或运行git push --help
以在本地启动手册页。