2017-01-05 137 views
0

我正在潜入Git的世界,我的第一项任务是自动化我们的构建过程。我使用的是Bash,因为这是我熟悉的,它似乎是我需要的。用Bash脚本克隆Git回购

在构建我的代码之前,我需要将最新版本的repo克隆到我的PC。

我似乎有一个捕获22.我想从Bash脚本克隆回购,这将是我试图克隆回购的一部分。

我希望我的构建/ bash脚本可以在源代码控制下与其他任何东西一起...但我还想要一个命令操作。

其他人如何解决这个问题?我最熟悉ClearCase,因此Git正在采取一些习惯。

+3

不要将部署脚本与其部署的代码存储在相同的回购站中,这是没有意义的。 – meagar

+0

这是一个捕获22,因为克隆存储库是一个动作,根据定义,* external *到存储库。至少,存储库的克隆脚本必须独立于构建系统的其余部分进行部署。理想情况下,整个构建系统位于存储库之外;它将*作为*输入*包含要构建的软件的存储库。 – chepner

+0

所以我使用的是一个持续集成服务(在我的例子中是travis-ci),在github上倾听我的主分支。推动触发器构建将repo克隆到travis环境中 - 从那里我可以访问我的部署脚本,如果构建通过,则会触发部署脚本。 – Lix

回答

0

Git clone与ClearCase mkview类似,它创建了一个新的工作文件夹,作为与存储库中的文件进行交互的主要方式。如果你正在为ClearCase编写这个脚本,你真的会开始创建一个新的ClearCase视图吗?如果你这样做了,你会有同样的catch-22情况。

常用的方法是假定clone操作是作为此构建系统的一次性设置的一部分完成的,并且该脚本已经可以访问工作文件夹。你更感兴趣的Git命令是clean,checkout,fetch,pullreset --hard。 Git命令之间有重叠,所以你不需要所有这些。显然,Git命令的选择以及你要调用它们的选项取决于你想要脚本执行的操作。

完成这样的操作后,将脚本保存在存储库中是没有问题的,除非您将版本控制与您正在构建的代码放在同一分支中。这并不一定是坏的,但与ClearCase中(通常)会发生的不同。

+0

基本上我可以做一个混帐'结账branch_name'或'git的结帐master'的同步我的本地回购与最新变化在每个分支上? @gatkin – user7379734

+0

本质上。我不会写你的脚本,但'git fetch; git checkout master; git reset --hard origin/master'应该让你开始。 – gatkin