Git 拉取,然后在 Ubuntu 中通过 Cron 推送

纳古沙布

一些上下文:我在一个 git 企业环境中,有一个 git repo,我在其中拉取整个代码,gulp 构建它,然后将分发复制到另一个 repo,在那里我将它推送到远程。

我已经在 bash 脚本中自动化了所有这些,每当我执行sh gittogulp.sh它时,它都会完美无缺。但是当我使用 cronjob 来做到这一点时,它无法从 git 中提取新内容,而是从已经存在的内容中构建 gulp。

我想知道,如何在不手动触发脚本的情况下从 git repo 中提取。Webhooks 不是我的选择。:(

gittogulp.sh 是:

#!/bin/bash
cd ~/mainrepo
git checkout dev
git fetch
echo "Pulling latest code from git repo"
git pull

for commitid in $(git log --format="%h" -n 10)
do
    git checkout dev
    echo "git reset hard"
    git fetch --all
    git reset --hard origin/dev
    echo "Checkout commit id: ""$commitid"
    echo git checkout "$commitid"
    git checkout "$commitid"
    echo "Installing dependencies"
    npm install
    echo "Gulpifying the code"
    gulp dev
    basefolder="/root/mainrepo/manifests"
    basedestfolder="/root/outputrepo/dev"
    if [ -d "$basefolder" ]; then

        versionrepo=`cat "$basefolder"/version.txt`
        echo "Version in repo: ""$versionrepo"
        destfolder="$basedestfolder""/""$commitid"

        if [ -d "$destfolder" ]; then
            echo "Latest outputs are already in place"
            break
        else
            echo "copying latest output to ""$destfolder"
            mkdir "$destfolder"
            cp -r "$basefolder" "$destfolder"
            zipname="$versionrepo""_""$commitid"".zip"
            zipdestpath="$basedestfolder""/""$zipname"
            echo "Making new zip from latest commit"
            echo zip -r "$zipdestpath" "$destfolder"
            zip -r "$zipdestpath" "$destfolder"
        fi

    else
        echo "$basefolder"" : folder doesn't exist, exiting"
    fi
done

cd ~/outputrepo
git pull
git add .
git commit -m "adding new zip"
git push
本杰明·贾法里

也许您不能使用.sh文件作为更改目录的终端,因此我向您提供使用以下方法(即.sh文件中的第 1,2 行):

git --git-dir=/home/<User>/<your_path>/.git checkout dev
...

并遵循此原始答案:git pull while not in a git directory

编辑:

另一种更好的方法是使用 fabfile(用于 python):
使用 fabfile 的 git 命令

例如(很简单):
fabfile.py:

from fabric.api import *

env.user = 'your_user'
env.hosts = ['127.0.0.1']
env.password = 'you_pswd'

@task
def pull():
    code_dir = '/srv/django/myproject'
    with cd(code_dir):
        run("git pull")

另一个例子(在本地):

.
|-- __init__.py
|-- app.wsgi
|-- fabfile.py <-- our fabfile!
|-- manage.py
`-- my_app
    |-- __init__.py
    |-- models.py
    |-- templates
    |   `-- index.html
    |-- tests.py
    |-- urls.py
    `-- views.py

工厂文件.py:

from fabric.api import *

@task
def push():
    local("git add -p && git commit")
    local("git push")

最后:
$ fab pull
$ fab push

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

git在Mac上通过cron推送到github

Git从Ubuntu服务器上的多个用户克隆,推送和拉取

Git从Ubuntu服务器上的多个用户克隆,推送和拉取

默认情况下无法从 VSCode 中的 Git 推送或拉取,并且 VSCode 推送到错误的分支

Cron作业自动推送到Git问题

通过RStudio推送Git提交

通过SSH克隆Git,通过https推送

从Git拉取请求中删除文件

无法从远程 git repo 中拉取

无法在git中推送分支

执行拉取和推送操作时出现以下错误(git-upload-pack not allowed on )

将更改从git子树推送到分支以进行拉取请求

Git配置文件和设置不允许从github拉取并推送到dreamhost

GIT 使本地分支从 remote1/master 拉取并推送到 remote2/legacy

CloudKit用于通过cron作业发送推送通知?

如何在不拉的情况下推送 git 中的更改

Git 在本地提交然后稍后推送

通过GIT推送大文件的问题

Git通过SSH推送失败,管道损坏

无法通过 Ubuntu 终端推送 Github

无法通过 Ubuntu 终端推送 Github

Git 通过不同的连接从同一个 repo 中拉取

即使存储库是新的,Git 也不会推送更改并要求拉取,为什么拉取请求不能解决它?

为什么我们需要在我们的分叉存储库中创建一个分支来推送我们的更改,然后向上游存储库创建拉取请求?

git:如何将提交推送到另一个人的现有拉取请求?

在 Ubuntu 18.04 上 git lfs 推送到 github 失败

推送后如何压缩git中的提交?

是否在Git中推送了远程地址?

在TFS Git中推送单个传出提交