为了账号安全,请及时绑定邮箱和手机立即绑定

Git 合并/拉取后使用 Maven 进行部分全新安装

Git 合并/拉取后使用 Maven 进行部分全新安装

慕婉清6462132 2022-01-19 17:01:41
使用终端,是否可以清理和安装 POM 项目中在 a 之后发生更改的项目,git merge/pull换句话说,自上次全新安装以来的更改?编辑感谢 VonC 的回答,我已经完成了一个可以满足我要求的脚本。有关详细信息,请参阅下面的答案。
查看完整描述

2 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

由于您可以检测到pom.xml两次提交之间的更改列表:

git diff --name-status <commit1> <commit2>

(另见“ Git pull 后的细节变化”)

,您可以制作一个脚本,该脚本将为每个模块执行一个mvn clean install.


查看完整回答
反对 回复 2022-01-19
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

我已经完成了一个可以满足我要求的脚本。


该项目是一个 POM 项目,其中包含包含应用程序主要项目的子 POM 项目。我通过让当前工作分支调用来实现了预期的结果git diff --name-status HEAD@{1} <current_branch>。


这得到了项目中已更改文件的列表,然后我将其拆分为一个数组。不幸的是,我无法让拆分正常工作,因此数组被组织为更改类型,后跟文件路径。


然后我检查了字符串大小,跳过了单个字符串。下一步是将字符串拆分为一个数组,由 . 分隔/。如果根路径检查它是否存在于数组中,如果不存在则添加。


最后,遍历根路径数组并执行 maven 调用。


################################################################################

#

# License:.....GNU General Public License v3.0

# Author:......CodeMonkey

# Date:........14 November 2018

# Title:.......GitMavenCleanInstall.sh

# Description: This script is designed to cd to a set Maven POM Project,

#   perform a git remote update and pull, and clean install the changed

#   files projects.

# Notice:......The project structure this script was originally set to target

#   is structured as a Maven POM Project that contains several sub-POM Projects.

#   The sub-POM Projects contain Maven Java Application projects. The targets

#   should be easy to change, and allow for others to target other structures.

#

################################################################################

#

# Change History: N/A

#

################################################################################


#!/bin/bash

#Function to check if array has element

containsElement () {

    local e match="$1"

    shift

    for e; do [[ "$e" == "$match" ]] && return 0; done

    return 1

}


#Navigate to the POM Project

cd PATH/TO/POM/PROJECT

#Remote update

git remote update -p

#Pull

git pull


#Get the current working branch

CURRENT_BRANCH="$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')"

#Get the output of the command git diff

GIT_DIFF_OUTPUT="$(git diff --name-status HEAD@{1} ${CURRENT_BRANCH})"


#Split the diff output into an array

read =a GIT_DIFF_OUTPUT_ARY <<< $GIT_DIF_OUTPUT

#Declare empty array for root path

declare -a GIT_DIFF_OUTPUT_ARY_ROOT_PATH=()

FORWARD='/'

#Loop diff output array

for i in "$GIT_DIFF_OUTPUT_ARY[@]}"

do

    #Check that the string is not 1 Character

    if [[ "$(echo -n $1 | wc -m)" != 1 ]]

    then

        #Split the file path by /

        IFS='/' read -ra SPLIT <<< $i

        #Concatenate first path + / + second path

        path=${SPLIT[0]}$FORWARD${SPLIT[1]}

        #Call function to see if it already exists in the root path array

        containsElement "$path" "${GIT_DIFF_OUTPUT_ARY_ROOT_PATH[@]}"

        if [[ $? != 0 ]]

        then

            #Add the path since it was not found

            GIT_DIFF_OUTPUT_ARY_ROOT_PATH+=($path)

        fi

    fi

done


#Loop root path array

for val in ${GIT_DIFF_OUTPUT_ARY_ROOT_PATH[@]}

do

    #CD into root path

    cd $val

    #Maven call to clean install

    mvn -DskipTests=true --errors -T 8 -e clean install

    #CD back up before next project

    cd ../../

done


查看完整回答
反对 回复 2022-01-19
  • 2 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信