天道酬勤,学无止境

How to deploy from git repo without server having access to repo?

I have a PHP project in a BitBucket git repo.

I work in a branch called "develop" for small fixes, or I work in temporary feature branches. When I'm ready to deploy, I merge those branches into "master".

I want to make deploying to my live site as easy as that (merging to master and pushing to BitBucket).

But I really don't want my server to have any access to my repo because that adds security concerns. If you care about security, you want your repo to be in as few places as possible. If your server gets compromised, that's a bad enough situation, but it would be even worse if the attacker then would have access to my full repo. This person agrees.

So I assume that I'll want to use something like git archive master, like https://stackoverflow.com/a/163769/470749 explains.

How can I set up a hook that detects a push of "master" and then runs git archive master to export the latest code (not as a repo, though) to a compressed zip file which it then sends (via SCP and/or Rsync?) to the remote server, unzips it to a new directory, and then (maybe via changing a symlink) points the server to that new directory?

Bonus question: how could I enable easy emergency rollbacks? (I imagine there might be situations where I want to revert to the previous commit quickly.)

评论

I'm happy with the scripts I ended up with:

deploy.sh:

##This executable file will export your latest code from master (via "git archive") and will upload it 
##to the remote server and then call a script on the server to handle from there.
##----------------------------------------------------------------------------------------------------

source dev-ops/archive_and_upload.sh

##On the remote server, run a script to archive the existing production site files and then deploy the uploaded package.
ssh -i ~/.ssh/id_rsa myUserName@vientiane.dreamhost.com <<'ENDSSH'

set -e

cd /home/myUserName/myProjectName/latest

##Unzip the zip file, then delete it.
echo "Unzipping the package.zip..."
unzip -o package.zip && rm package.zip  

cd /home/myUserName/myProjectName/

nowTime=$(date -u +"%Y-%m-%d__%H:%M:%S")
echo "The archive will have this timestamp: " $nowTime

##Copy the "latest" folder to a dated "packages" subfolder.
cp -R latest/ packages/$nowTime 
echo "Copied the existing site to an archive."

##Install Laravel dependencies.
echo "Running Composer so that the remote server downloads and installs dependencies..."
cd packages/$nowTime 
php -d memory_limit=256M ~/bin/composer.phar install   

##Delete the "live" symlink and immediately create a new "live" symlink to the most recent subfolder within "packages".
echo "Updating the symlinks..."
cd /home/myUserName/myProjectName/
echo `pwd`
rm previous
mv live previous && ln -s packages/$nowTime live && ls -lah  

##Clear out the "latest" folder in preparation for next time.
echo "Deleting the contents of the 'latest' folder in preparation for next time..."
rm -rf latest/* && ls latest   
ENDSSH

echo "FINISHED DEPLOYING!"

archive_and_upload.sh:

##This executable file will export your latest code from master (via "git archive") and will upload it 
##to the remote server.
##----------------------------------------------------------------------------------------------------

##Clear out the contents of the previous export package.
rm -rf dev-ops/package/*   

##Export the "master" branch of this git repo. (The result is not a repo but is just code.)
git archive --format zip --output dev-ops/package/package.zip master  

##Send zip file to remote server.
scp -i ~/.ssh/id_rsa dev-ops/package/package.zip myUserName@vientiane.dreamhost.com:/home/myUserName/myProjectName/latest/package.zip 

revert_to_previous_package.sh:

ssh -i ~/.ssh/id_rsa myUserName@vientiane.dreamhost.com <<'ENDSSH'

set -e

cd /home/myUserName/myProjectName/

mv live rollingBack && mv previous live && mv rollingBack previous && ls -lah

ENDSSH

echo "ROLLED BACK!"

As you can see, I set my Dreamhost server to serve from a folder called "live", which is really just a symlink to a subfolder that is named as the timestamp for when that package of code was uploaded. There is also another symlink called "previous" which makes rolling back easy (in case I notice problems after deploying and want to revert).

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Heroku:私有存储库中的 Python 依赖项,无需存储我的密码(Heroku: Python dependencies in private repos without storing my password)
    问题 问题 我的问题就像如何为 Python Heroku 项目安装内部需求一样? 以及如何在部署时在 Heroku 中自定义 pip 的 requirements.txt?。 也就是说,我有一个私有存储库,我需要将 Python 依赖项安装到 Heroku 应用程序中。 Heroku 自己的 Kenneth Reitz 给出的规范答案是把类似的东西 -e git+https://username:password@github.com/kennethreitz/requests.git@v0.10.0#egg=requests 在您的requirements.txt文件中。 我的安全需要阻止我将密码存储在回购中。 (我也不想将依赖项放在我的应用程序的存储库中;它们是独立的软件部分,需要在单独的存储库中。)我可以提供密码的唯一地方(或者,最好是 GitHub OAuth 令牌或部署键)到 Heroku,在一个环境变量中,如 heroku config:add GITHUB_OAUTH_TOKEN=12312312312313 尝试的解决方案 我可以在我的应用程序的存储库中使用自定义.profile ,但是每次进程(web、worker 等)重新启动时,我都会下载并安装我的依赖项。 这使得使用自定义 buildpack 和 Heroku Labs 插件在 buildpack
  • github部署密钥:如何为一台机器授权多个存储库(github deploy keys: how Do I authorize more than one repository for a single machine)
    问题 所以,我有一个主机,称之为rob 。 我在rob上使用 ssh-keygen 来获取一个公钥,我在为存储库cheech添加一个新的部署密钥屏幕中将它提供给了 github。 现在我也想在rob上部署chong 。 但是,如果我转到 github 上存储库chong的添加新部署密钥屏幕,并粘贴我在rob生成的公钥,它会显示key already in use 。 我想,如果他们的密钥正在使用中,我可以在rob上克隆chong ,但这表示许可被拒绝。 很明显,这比我想象的要复杂,它涉及有多个键或其他东西。 我应该怎么做才能在rob上克隆chong ? 感谢您的帮助。 回答1 一旦密钥作为部署密钥附加到一个存储库,就不能在另一个存储库上使用。 如果您在设置部署密钥时遇到此错误,那么您需要修改您的遥控器并设置您的~/.ssh/config文件以使用 ssh 能够使用的不存在的github.com 主机名用于为您的存储库选择正确的 ssh 部署密钥。 # first we remove the origin $ git remote -v origin git@github.com:username/foo.git (fetch) origin git@github.com:username/foo.git (push) $ git remote rm origin # here we
  • 阿里云服务器上部署搭建hexo个人博客(宝塔面板搭建更省力)
    阿里云服务器上部署搭建hexo个人博客(宝塔面板搭建更省力) 阿里云服务器,搭建hexo,个人博客hexo怎么搭建,hexo静态博客 部署前期准备 个人使用的环境 需要一个本地环境: Windows10(64位)电脑一台, 云主机:阿里云ECS(CentOS 8 64位),这里不一定跟我系统一样也能搭建成功,KK用的基本最新的系统。 整个部署过程 本地环境搭建(Git,NodeJs,Hexo) 云主机环境搭建(Git,宝塔面板一键部署Nginx) 使用git自动化部署博客 开始部署 本地Win10搭建环境 安装Git(下载安装包,打开后一直下一步到结束就行) 安装Nodejs(下载安装包,打开后一直下一步到结束就行) 安装Hexo(下面详细讲解安装步骤)文章里面有步骤搭建本地hexo 本地搭建成功后 开始 生成ssh公钥 在Win10桌面右击,点击Git Bash Here打开命令行终端,执行如下命令(直接按三次回车生成密钥) ssh-keygen -t rsa 生成的文件默认在~/.ssh目录中,看到有id_rsa,id_rsa.pub这些文件即可, Win10中就是 我的电脑/C盘/用户/你自己的用户名/.shh/ 就可以看到了 阿里云Centos搭建环境 安装git yum install git 创建Git账户 adduser git 添加账户权限 chmod 740
  • 存储库访问被拒绝。 通过部署密钥进行的访问是只读的(Repository access denied. access via a deployment key is read-only)
    问题 从heroku成功克隆我的存储库并添加另一个遥控器后 1/ git clone git@heroku.com:[APP].git 2/ git remote add bitbucket ssh://git@bitbucket.org/[ACCOUNT]/[REPO].git 3/ git push bitbucket master 在运行第(3)行或使用SourceTree之后,我仍然收到此错误 conq: repository access denied. access via a deployment key is read-only. 首先,我不了解此消息在实践中的含义。 那太可惜了。 我确实创建了ssh密钥对,并将其添加到heroku中: ssh-keygen -t rsa heroku keys:add ./id_rsa.pub 我还在BitBucket的“部署密钥”部分中添加了我的密钥。 但是我一定想念一些东西。 这个问题并非出于懒惰,我一直在阅读各种文档,包括BitBuckets指南。 但是它仍然无法解决这个问题。 这篇文章与我可以将我的heroku git repo导入bitbuket有关吗? 如何? 其他事实: ssh -T hg@bitbucket.org conq: authenticated via a deploy key. You can use
  • 使用带有远程 git repo 的 capistrano 进行部署,但没有在生产服务器上运行 git(deploying with capistrano with remote git repo but without git running on production server)
    问题 我有一个远程 git 存储库设置,用于在我的团队内进行集中开发。 但是,我们部署应用程序的生产服务器目前没有运行 git。 我们想使用 capistrano 来部署我们的应用程序,我们如何在部署时设置我们的部署配方以从远程 git 存储库“拉取”? 换句话说,我可以做这样的事情吗? set :repository, "myserver.com/git/#{application}.git" set :scm, "git" set :deploy_via, :copy 回答1 您问题中的解决方案接近正确。 不过,您需要稍微不同地指定您的 git 存储库。 你需要的是: set :repository, "someuser@somehost:/home/myproject" set :scm, "git" set :deploy_via, :copy 在 lib/capistrano/recipes/deploy/scm/git.rb 下有更多关于如何在 Capistrano gem 中设置 git 部署的示例。 当您使用copy部署策略时会发生什么事情是 Capistrano 将您的 git repo 克隆到本地机器上的/tmp ,tars & zip 压缩结果,然后通过 sftp 将其传输到服务器。 复制策略也支持通过 scp 进行复制,但是如果不对源代码进行一点修改
  • 推送到 webroot 上方的托管项目(Pushing to Hosted project above webroot)
    问题 我在DreamHost托管了一个CakePHP应用程序 - 并在我的 MacBook 上本地复制了它。 我试图建立我的环境,这样我可以在MacBook上的发展,推动了网站托管在必要时-但无法弄清楚如何设置git从当地推动远程当远程文件是上面的webroot 。 如何设置我的本地 git 以推送到托管应用程序上 webroot 上方的文件? 谢谢! 回答1 但是当远程文件位于 webroot 之上时,无法弄清楚如何设置 git 从本地推送到远程。 要设置存储库,您需要一个中间存储库作为参考点。 现在这个 repo 可以在一个托管站点上,比如github或bitbucket ,或者它可以是你服务器上的一个裸仓库。 (注意-bitbucket 为少量用户提供免费的私人存储库) 裸存储库的优点是您可以规避与在服务器、在线服务和您的开发机器之间设置ssh机制相关的任何问题。 缺点是如果您的服务器出现故障,服务器上的所有代码都会丢失,尽管您的开发机器上仍然会有它的副本,因此并非所有代码都会丢失。 步骤1 因此,让我们假设您继续使用裸仓库。 如果您将使用 bitbucket/github,请忽略此步骤。 为此,我们需要在您的服务器上创建一个如下所示的裸仓库: ssh user@myserver cd /some/isolated/location git init --bare
  • Ansible:如何以其他用户身份克隆存储库(Ansible: how to clone a repository as other user)
    问题 我正在尝试使用 Ansible 编写部署规则。 其中一些步骤是: 更新和升级服务器创建一个名为 Harry 的用户添加公钥和私钥给哈利从 bitbucket.org 克隆 Git 存储库 我想在他的主目录中以harry用户的身份克隆存储库(这就是我复制它的公钥和私钥的原因)。 问题是无法指定必须作为 g​​it clone 执行的用户。 所以 Ansible 尝试以 root 身份克隆存储库并失败,因为他没有访问存储库的权限。 你如何解决这个问题? 回答1 根据 Ansible 关于权限提升的文档,Ansible 对成为非特权用户有限制,因为它向 Harry 暴露了一个安全漏洞。 使用 Ansible git 模块,您可以使用key_file参数指定使用来自特权 Ansible 用户的 Harry 的私钥,并且使用become_user允许将克隆文件的所有权授予 Harry。 例如: - name: Clone bitbucket repo git: repo: git@bitbucket.org:your-repo.git dest: /var/www/ version: master accept_hostkey: yes key_file: /home/harry/.ssh/id_rsa become_user: harry 回答2 您可以为剧本中的每个任务指定一个用户
  • 在Heroku上安装私有ssh部署密钥(Installing private ssh deploy keys on Heroku)
    问题 我正在创建一个node.js应用程序,用作Github的Web挂钩,当推送更改时,该应用程序将自动部署特定的私有存储库。 为了使Webhook应用程序尽可能高效,我想在部署时将其克隆并拉到Webhook的Heroku实例中的临时目录中,以便在Webhook触发时,我只需要“ git pull”即可获取最新版本更新并部署它们。 部署webhook应用程序时(使用package.json或Procfile)运行shell脚本很容易,但是在运行git命令之前,我必须先安装私有部署密钥。 目前,私钥和公钥都在我的webhook存储库中(我知道,我知道,一旦我能正常工作,我会做得更好),所以我尝试通过将其添加到我的shell脚本中来安装它(在此处建议) mkdir /app/.ssh cp config/ssh/* /app/.ssh/ mkdir /tmp/repos git clone --bare ssh://github.com/<username>/<repo>.git /tmp/repos/<repo> 但我得到: / tmp / repos / assets /主机密钥验证中初始化的空Git存储库失败。 致命:远端意外挂断 公钥已作为我部署的回购中的部署密钥添加,所以我的问题是: 我是否将私钥安装在正确的目录中? 私钥文件是否必须具有特定名称? 这种方法是否可能/推荐?
  • 如何在不放弃应用程序的密钥和凭证的情况下开源我的Rails应用程序(How do I open source my Rails' apps without giving away the app's secret keys and credentials)
    问题 我在GitHub上托管了许多Rails应用程序。 它们目前都是私有的,我经常从他们的GitHub存储库中部署它们。 我希望能够使其中一些开源,就像您可以在http://opensourcerails.com上找到的那样。 我的问题是:如何在不泄露超级机密凭证的情况下将这些存储库公开? 例如,我可以查看/config/initializers/cookie_verification_secret.rb并查看其中几乎每一个的cookie机密。 我不明白这是如何接受的。 这些用户是否都以某种方式在他们的部署环境中更改了这些值? 有些用户甚至公开了他们的AWS秘密和密钥! 其他人则将其AWS机密设置为: ENV['aws-secret'] 尽管我不确定他们会在什么时候设置该值。 因此,在不损害应用程序安全性的前提下,公开采购Rails应用程序的最佳实践是什么。 回答1 我最近使用自己的一个应用程序进行了此操作。 我的解决方案是将任何秘密存储在忽略git的YAML配置文件中,然后使用初始化程序目录中的简单类访问该文件。 配置文件存储在Capistrano部署的“共享”文件夹中,并在每次部署时复制到config。 配置存储:http://github.com/tsigo/jugglf/blob/master/config/initializers/juggernaut.rb 用法示例
  • 是否可以使用pip从私有GitHub存储库安装软件包?(Is it possible to use pip to install a package from a private GitHub repository?)
    问题 我正在尝试从私有GitHub存储库安装Python软件包。 对于公共存储库,我可以发出以下正常运行的命令: pip install git+git://github.com/django/django.git 但是,如果我尝试将其用于私有存储库: pip install git+git://github.com/echweb/echweb-utils.git 我得到以下输出: Downloading/unpacking git+git://github.com/echweb/echweb-utils.git Cloning Git repository git://github.com/echweb/echweb-utils.git to /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build Complete output from command /usr/local/bin/git clone git://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build: fatal: The remote end hung up unexpectedly
  • deploying with capistrano with remote git repo but without git running on production server
    I have a remote git repository setup for centralized development within my team. However, the production server that we deploy our applications currently does not have git running on it. We want to use capistrano to deploy our applications how can we set up our deploy recipes to 'pull' from the remote git repositories when deploying? In other words can I do something like this? set :repository, "myserver.com/git/#{application}.git" set :scm, "git" set :deploy_via, :copy
  • 访问 GitHub 私有存储库时部署到 ec2 实例失败(Deploying to ec2 instance failing when access GitHub private repo)
    问题 大约一年前,我设置了我的 GitHub 帐户,当时生成了一个新的 SSH 密钥(以便从命令行轻松地从 GitHub 推送和拉取)。 几天前,我启动了一个新的 ec2 实例,并将它给我的.pem文件下载到其中。 我可以使用该.pem文件通过命令行轻松通过 SSH 连接到服务器。 我正在使用 Capistrano 部署我的 Rails 应用程序,并运行cap staging deploy:check 。 在deploy.rb文件,我有私人回购的git的URL,并在staging.rb文件我已经设置了set ssh_options到的位置.pem我从EC2实例下载的文件。 当命令开始运行时,它可以正常连接到服务器,但是当它尝试访问 git 存储库时, GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/<APP_NAME>/git-ssh.sh /usr/bin/env git ls-remote -h git@github.com:<USERNAME>/<APP_NAME>.git ,它失败并显示以下消息: Permission denied (publickey). fatal: Could not read from remote repository. 一直在网上研究这个问题,从我收集的信息来看,GitHub 和 ec2 服务器似乎都需要相同的 SSH。
  • Deploying to ec2 instance failing when access GitHub private repo
    I set up my GitHub account about a year ago, and generated a new SSH key at the time (to easily push and pull from GitHub from Command Line). A few days ago I spun up a new ec2 instance, and downloaded the .pem file it gave me to SSH into it. I am able to easily SSH into the server through the command line using that .pem file. I'm using Capistrano to deploy my Rails app, and running the cap staging deploy:check. In the deploy.rb file, I have the private repo git url, and in the staging.rb file I have set the set ssh_options to the location of the .pem file I downloaded from ec2 instance. When
  • 采用GitOps的11大原因
    Kubernetes允许我们单纯地使用声明性的配置文件来管理我们的应用部署和其他基础设施组件(例如,我们现在都是YAML开发者)。这使我们能够把所有这些文件放到Git仓库中,然后把它挂到流水线上(Jenkins、GitLab等),流水线会把这些变化应用到集群上,然后就有了GitOps。如果你还不了解GitOps是什么,可以查看我们之前发布过的文章:GitOps初阶指南:将DevOps扩展至K8S 为了使工作正常进行,我们必须确保改变集群的唯一方法是在Git仓库上提交。GitOps并不是专门针对Kubernetes的,同样的原理也可以应用于任何其他声明式配置管理的环境。 可以说,很多企业已经开始采用GitOps了,但现在是业界开始充分认识到其潜力的时候。所以,让我们深入了解一下它如此出色的原因吧! 1、存储环境变更历史记录 只有通过更新相应Git仓库中的配置,才能改变应用环境。这将创建一个完整的状态变化的历史记录,包括谁做了更改和为什么更改的记录。你可以通过正在使用的Git用户界面来读取历史记录。 2、轻松回滚到之前的状态 一旦我们所有的变更都被存储为Git历史记录,就可以很容易地将一个环境回滚到之前的任何状态。通过还原一些commit,我们可以回到以前的工作状态。 3、保障部署安全 一旦对集群的所有更改都通过GitOps repo,用户和持续集成(CI)流程就不需要再访问集群了
  • Cap 部署 - 错误:未找到存储库(Cap deploy - ERROR: Repository not found)
    问题 我继承了一个项目并且对事物的开发方面感到满意,但是系统管理员很差,并且 Capistrano 部署失败了。 对于之前的开发者已经部署过的项目: cap deploy:check 运行良好,导致 You appear to have all necessary dependencies installed 但是当我尝试部署时,我得到 ... ERROR: Repository not found. ... 我有: 三重检查github repo地址确认我可以从本地机器上的 repo 中推送和拉取确认我可以通过 SSH 从服务器连接到 github 确认我可以在服务器上克隆 repo 尝试打开和关闭代理转发确认 .git/config 和 config/deploy.rb 中的 repo 路径匹配 目前,当代理转发关闭时,从服务器到 github 的 SSH 正在返回前一个开发人员的信息,该开发人员仍然可以访问 github 存储库。 Hi xxxxxx! You've successfully authenticated, but GitHub does not provide shell access. 当代理转发打开时,我显示为经过身份验证的用户。 有关解决此问题的任何提示? 很高兴有一个体面的 URL 来解决这个问题。 回答1 OK,通过一个淘汰的过程算出来了。 这是
  • 如何指定要从私有 github 存储库中提取的 gem?(How can I specify a gem to pull from a private github repository?)
    问题 我在 Github 上有一个要使用的私有存储库。 我将我的应用程序部署到 Heroku。 如何在我的 gemfile 上指定一个私有存储库作为源? 我想仅仅说是不够的 gem "mygem", :git=>"my github address" 回答1 根据 Heroku 技术支持的建议,最简单的方法是将用户名和密码放入 URL 中,如 Basic HTTP Auth,例如 gem 'my_gem', :git => 'https://my_username:my_password@github.com/my_github_account/my_repo.git', :ref => 'revision_no' 这对我们有用。 这仍然有些不满意,因为我们不得不在 Gemfile 中输入密码。 我们通过添加一个新的 github 用户帐户并将该帐户添加为 gem 项目的合作者来解决这个问题。 仍然不是万无一失的安全性,但影响更小。 我读到的其他选项是设置您自己的 gem 服务器或供应 gem。 2012 年 5 月 16 日更新:另一种绕过将密码放入Gemfile是将密码放入环境变量中; 在 Heroku 上,您使用heroku config:add VAR=value执行此操作,然后在Gemfile使用此变量,例如: gem 'my_gem', :git => "https:/
  • 为什么我不能克隆一个用于 readthedocs 的 git repo 来构建文档?(Why can't I clone a git repo for readthedocs to build the documentation?)
    问题 我正在尝试为readthedocs导入我的项目代码,以便它可以为我生成文档。 但是,在克隆repo的阶段,已经出现了错误: checkout ----- Failed to import project; skipping build. Error ----- Failed to get code from 'http://mydomain/myproject.git' (git clone): 128 该错误代码表明,该存储库是私有的,我无法在不登录的情况下访问它,除非我拥有能够在我的计算机和服务器之间建立安全连接的 SSH 密钥。 所以我生成了我的密钥,然后将它添加到项目中的 Deploy Keys 中。 您能想到为什么我仍然无法访问项目代码的任何原因吗? 回答1 发生这种情况的原因是,尽管我为该项目提供了一个公共 URL,但任何不是项目成员、注册用户或拥有 SSH 密钥的人仍然无法访问它,以便在他的计算机之间建立安全连接和项目回购。 readthedocs文档不是托管在我自己的服务器上,而是托管在readthedocs服务器上,因此该服务器需要一个 SSH 密钥或对项目的访问权限,这两者对我来说都是不可能的。 因此,我能想到的唯一解决方案是将项目公之于众(这是不可取的,因为它是我们的私人公司项目,我们不希望任何不需要的人访问它)或使其可用于某个集合IP 地
  • 将提交推送到Amazon EC2时权限被拒绝(公钥)(Permission denied (publickey) when pushing commit to amazon ec2)
    问题 我知道这里存在很多类似的问题(在发布此问题之前,我已经阅读了很多问题),但是这个问题与众不同,所以请和我呆一会儿。 几天前,我在Amazon EC2上配置了远程git存储库。 经过数小时的奋斗,我使它能够正常工作并且能够push文件push送到那里。 我使用它一两天,没有任何问题地将资源推送到它(我看到每个更新都正确)。 今天,由于某种原因,我无法从本地计算机向其中推送任何内容。 git push deploy最终显示以下错误消息(当我尝试获取有关deploy的信息时,会看到相同的错误消息: git remote show deploy ): warning: push.default is unset; its implicit value is changing in Git 2.0 from 'matching' to 'simple'. To squelch this message and maintain the current behavior after the default changes, use: git config --global push.default matching To squelch this message and adopt the new behavior now, use: git config --global push
  • 使用 Capistrano + Gitlab 部署,使用 via:remote_cache(Deployment using Capistrano + Gitlab using via: remote_cache)
    问题 我正在使用 capistrano 部署 PHP Web 应用程序,我们有一个内部 gitlab 服务器,该服务器无法在网络外部访问。 我正在尝试使用 remote_cache 进行部署,因为如果使用它进行复制需要很长时间。 我已经检查了 This 和 This 但没有得到想要的结果。 我正在尝试下面的代码。 set :default_stage, "staging" ssh_options[:forward_agent] = true server "servername", :app, :web, :db, :primary => true set :application, "appname" set :scm, :git set :repository, '.' set :local_repository, "file://." set :branch, "master" default_run_options[:pty] = true set :keep_releases, 2 set :user, 'username' set :deploy_to, "/home/domain/public_html/test" set :copy_cache, true set :deploy_via, :remote_cache set :copy_strategy,
  • 如何在 EC2 上推送到 git(How to push to git on EC2)
    问题 我正在尝试遵循此说明。 我有一个本地 git 存储库,当我执行 git push 时,我需要将存储库推送到我的 EC2 实例。 但是,在上面的教程中,当我执行git push origin master ,我收到Permission denied (publickey)错误,因为我没有指定身份文件。 说,我像这样登录到 EC2: ssh -i my_key.pem username@11.111.11.11 那么,我可以在这里做类似的事情: git -i my_key.pem push origin master或在.git/config设置身份文件 那么,我该如何设置呢? 更新: git config -l输出 user.name=my name user.email=my_email_addreess@gmail.com github.user=userid core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true core.ignorecase=true remote.origin.url=ec2_id@my_e2_ip_address:express_app remote.origin.fetch=+refs/heads/*:refs