用git指令别名,解决unity环境问题

文章目录

      • 背景
      • 问题解决
        • 尝试1
        • 尝试2
        • 尝试3

背景

unity 项目开发时,由于我本机的配置和项目组其他小伙伴的配置不一样,使用统一的配置打开项目会出现花屏的现象,经过摸索尝试,需要修改 unity 的Project Settings。修改之后,项目文件会有变更,若是提交,其他小伙伴 pull 之后会导致他们的工程不可用。所以我只能本地修改这个文件,且不能将该文件的变更提交到项目当中。
用git指令别名,解决unity环境问题_第1张图片

问题解决

尝试1
git update-index --assume-unchanged ProjectSettings/ProjectSettings.asset

本地设置忽略 ProjectSettings 文件没有发生变更,这样 pull ,push 代码都没有问题,但是切换分支就会产生冲突。每次切换分支就需要解决冲突,还是很麻烦。

尝试2

用git指令别名,解决unity环境问题_第2张图片
git 指令支持 hook,我只需要每次切换分支前将 ProjectSettings 还原,切换分支后再修改 ProjectSettings 文件,并重新设置本地忽略 ProjectSettings 文件的变更,就可以实现我想要的功能。
但实际测试下来,发现 git 并不支持 pre-checkout,只支持 post-checkout。所以这种方式也不太行。

尝试3

既然前两种方式都不行,那就只能自己写脚本来实现了,git 命令支持别名,可以将别名指向自己写的脚本。
设置checkoutscript别名

git config --global alias.checkoutscript '!sh D:\Applications\script\checkoutscript.sh'

checkoutscript脚本,假设我们的项目为 abc

#!/bin/bash
echo "run checkout script"

# 检查参数数量
if [ $# -eq 0 ]; then
    echo "no params"
    exit 1
fi

# 检查第一个参数
first_arg="$1"
# 如果第一个参数是 '.' 或 '-b'
if [ "$first_arg" == "." ] || [ "$first_arg" == "-b" ]; then
    # 将所有参数传递给 git checkout
    git checkout "$@"
    exit 0
fi

# 检查remote url
remote_url=$(git remote get-url origin) 
echo "$remote_url"
if [ -z "$remote_url" ]; then  # 如果 URL 为空
    git checkout "$@"
    exit 0
fi

# 如果不是abc项目,执行checkout
if ! [[ "$remote_url" = *"abc"* ]]; then  
    # echo "remote URL does not contain 'abc', performing checkout with provided branch name."
    git checkout "$@"
    exit 0
fi

branchName=$1
if [ -z "$branchName" ]; then
    echo "branchName is empty"
else
    echo "branchName is not empty: $branchName"
    echo "Current directory is: $(pwd)"
    echo "pre checkout"
    git update-index --no-assume-unchanged ProjectSettings/ProjectSettings.asset
    git checkout ProjectSettings/ProjectSettings.asset
    git checkout $branchName
    # 变更配置文件,并本地忽略配置文件的变更
    sed -i 's/m_APIs: 0b00000002000000/m_APIs: 020000000b000000/g' ProjectSettings/ProjectSettings.asset
    sed -i 's/selectedPlatform: 2/selectedPlatform: 4/g' ProjectSettings/ProjectSettings.asset
    git update-index --assume-unchanged ProjectSettings/ProjectSettings.asset
    echo "end after checkout"
fi

这样,我每次需要切换分支的时候直接执行 git checkoutscript xxx 就可以了,也不影响 pull 和 push操作。

你可能感兴趣的:(git,git,unity,游戏引擎)