- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在生产中,我维护两个站点 - 测试版和发布版。每个都通过软链接(soft link)指向不同的目录(例如)
beta_public_html -> /home/scott/myapp/trunk/public
public_html -> /home/scott/myapp/branches/1.2.3/public
我是 svn 的长期用户,正在转向 git。我习惯于通过 svn update 部署并更改新分支上的软链接(soft link),事情非常简单。
现在我要转向 git。我仍然需要两个软链接(soft link)(这是一个使用 Passenger 的 Rails 应用程序),尽管现在我希望它们指向两个不同的 git 分支(比如“beta”和“release”)。我希望能够通过 git push(或 git pull)更新它们。
问题第 1 部分:我不确定执行此操作的最佳方法。
我开始这样做的方式是只部署到两个不同的远程,例如
git push ssh://scott@x.com/home/scott/myapp-beta beta
git push ssh://scott@x.com/home/scott/myapp-release release
但这不起作用,因为默认情况下推送不会更新工作树。
所以我进入远程目录并第一次运行 git reset --hard,它 pull 了工作树。但我再次按下,但无法显示新的推送 - 它只是停留在初始位置。
(顺便说一句,请注意,我似乎无法推送到“myapp-beta.git”——失败了,我必须推送到目录名称。我担心这是问题的一部分,但我不不知道我在这里做错了什么。)
因此,如果问题 1 的答案是我的方法很好,那么问题第 2 部分:我实际做的事情有什么问题?如果有我应该使用的 Hook ,有人可以指点我吗?
(问题 1 的回答说“运行这七个手动步骤”并不是一个非常有用的答案,因为 svn checkout + ln -s 是两个步骤。)
谢谢。我想回去写代码。
最佳答案
文章Git push is worse than worsless对类似问题进行了有趣的讨论。
其解决方案和结论之一涉及:
所以在你的情况下,
简而言之:一步:git push
。不再需要管理链接(因为目录不再代表 Git 中的分支,与 SVN 不同)
关于 Hook 部分,一个post-receive hook在裸仓库中可能是你需要的一切
参见 Git Tip: Auto update working tree via post-receive hook
$ cd bare
$ chmod +x .git/hooks/post-receive
with a post-receive hook like
#!/bin/sh
cd ../../beta
env -i git reset --hard
cd ../../release
env -i git reset --hard
注意:
the
post-receive
hook starts out with theGIT_DIR
environment variable set to therepo/.git
folder, so no matter what path you 'cd
' into it will always try to run any following git commands there.
Fixing this is simply a matter of unsetting theGIT_DIR
.
'env -i' does just that : 它完全忽略了继承的环境,只使用提供的变量和值。
关于ruby-on-rails - 如何通过 git push 将多个分支部署到不同的目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1464188/
我正在为我的程序编写安装脚本,它应该在 Linux/Unix 操作系统上运行。以下文件的默认目录是什么: 可执行文件(程序)。程序应通过从命令行键入其名称来执行。 共享库。 第三方共享库(程序未开源,
我有一堆用户、组和应用程序注册,我的 MVC 应用程序使用 AAD 数据进行身份验证和授权。是否可以将 Azure Active Directory 从一个租户(目录)迁移到另一个租户(目录)?如果可
查看 cljsbuild 文档 https://github.com/emezeske/lein-cljsbuild :cljsbuild { :builds [{ ; The
忽略已经版本控制的文件 如果你不小心添加了一些应该被忽略的文件,你如何将它们从版本控制中去除而不会丢失它们?或许你有自己的IDE配置文件,不是项目的一部分,但将会花费很多时间使之按照自己的方式工作。
我想使用\tableofcontents 命令,但没有目录从新页面开始或在末尾创建新页面,并且所有内容都是单倍行距。我怎样才能做到这一点?我假设使用 tocloft,但有哪些选择? 谢谢 最佳答案 试
我有一些 javascript 菜单代码,可以在单独的目录中正常工作。但是,当我尝试从同一目录中调用相同的 .js 文件时,它不会看到这些文件。 以下内容来自另一个目录: script type="t
我有这样的路径: /my/path/to/important_folder 在同一级别上,我还有其他文件和文件夹想要在达到与 important_folder 相同的级别时列出。 我的文件夹可能更深,
1、获取文件路径实现 1.1 获取当前文件路径 ? 1
我正在使用最新版本的 NTEmacs。 我写了一个名为“.dir-locals.el”的文件,如下所示。 ((nil . ((tab-width . 8) (fill-column .
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
在我的 .vimrc 中有这些行 :set foldmethod=marker :set foldmarker=SECTION:,ENDSECTION: 用于自定义代码折叠。在我的文件中,相关语言的注
在 fish 中: for x in * echo $x end *这里包括所有目录和文件,如何只列出文件(或目录)? 最佳答案 fish 没有很多花哨的通配语法。但是,目录可以像这样迭代: f
这是我的目录结构: ├── src │ ├── helpers │ │ ├── __init__.py │ │ ├── foo.py │ │ └── bar.py │
我想递归重命名文件夹/目录名称并找到 this solution所以。但是这个命令没有效果 find . -type f -exec rename 's/old/new/' '{}' \; 这是一个正
我想在相册中创建一个文件夹,并希望将图像保存在创建的相册中。 这可能吗?有什么办法可以做到这一点吗? 我已经搜索过,大多数人都说这是不可能的。 感谢您的帮助。 最佳答案 您也许可以使用AssetsLi
如何在python中使用用户定义的名称创建临时文件/目录。我知道 tempfile .但是我看不到任何以文件名作为参数的函数。 注意:我需要这个来对包含临时文件的临时目录上的 glob(文件名模式匹配
我在项目中使用JaCoCo Gradle插件。 作为问题的一个示例,我的大部分代码都在com.me.mysoftware包下。 我正在使用代码生成器来生成build/generated/java/..
我正在尝试使用 Gradle 开始运行 jar 文件 我的任务如下所示: task startServer(type: Exec) { workingDir file("${buildDir}/a
如何在 Ant 中定义一个目录集,其中包括两个目录:项目的基目录和子目录“test”? 看起来您无法使用“/”、“.”或“”专门包含目录集的根目录。例如,这包括“./test”,但不包括“.”:
我正在使用 CTAGs 包,它使用 Sublime Text 2 生成两个文件 .tags 和 .tags_sorted_by_file。 那么当我进行项目搜索(CMD + SHIFT + F)时,如
我是一名优秀的程序员,十分优秀!