赞
踩
unity 项目开发时,由于我本机的配置和项目组其他小伙伴的配置不一样,使用统一的配置打开项目会出现花屏的现象,经过摸索尝试,需要修改 unity 的Project Settings。修改之后,项目文件会有变更,若是提交,其他小伙伴 pull 之后会导致他们的工程不可用。所以我只能本地修改这个文件,且不能将该文件的变更提交到项目当中。
git update-index --assume-unchanged ProjectSettings/ProjectSettings.asset
本地设置忽略 ProjectSettings 文件没有发生变更,这样 pull ,push 代码都没有问题,但是切换分支就会产生冲突。每次切换分支就需要解决冲突,还是很麻烦。
git 指令支持 hook,我只需要每次切换分支前将 ProjectSettings 还原,切换分支后再修改 ProjectSettings 文件,并重新设置本地忽略 ProjectSettings 文件的变更,就可以实现我想要的功能。
但实际测试下来,发现 git 并不支持 pre-checkout,只支持 post-checkout。所以这种方式也不太行。
既然前两种方式都不行,那就只能自己写脚本来实现了,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操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。