팀 내 프로젝트들 간에는 의존 관계가 존재하며, 과거의 사유로 인해 submodule
을 사용하여 프로젝트 의존성을 관리하지 않았습니다. 따라서 일상적인 개발 과정에서 저장소 코드를 수동으로 순차적으로 업데이트해야 하며, 그렇지 않으면 다양한 이상한 문제가 발생할 수 있습니다.
온라인 자료를 참고하여 구조가 기본적으로 유사하므로, 로컬에서 git_list.txt라는 저장소 디렉터리를 수동으로 유지하고, 스크립트를 작성하여 디렉터리를 순회하며 한 번에 업데이트합니다. 이후 작업 전에 스크립트를 실행하세요.
linux
create new file: batch_pull.sh
#!/bin/bash
echo "============ 更新仓库 ==================="
# 检查 git_list.txt 是否存在
if [ ! -f "git_list.txt" ]; then
echo "git_list.txt 文件不存在!请创建并添加要拉取的 git 仓库 URL。"
exit 1
else
echo "============ 检测到了 git 仓库清单文件 ===="
fi
# 逐行读取 git_list.txt 中的 URL,并执行拉取操作
while read -r url; do
if [ -d "$url" ]; then
cd "$url" || continue
git pull
cd ..
echo "Pull $url 完成!"
echo "========================================"
else
echo "目录 $url 不存在,跳过拉取。"
fi
done < "git_list.txt"
windows
create a new file: batch_pull.bat
@echo off
chcp 65001 > nul
rem 进入脚本所在目录
cd /d "%~dp0"
rem 检查 git_list.txt 是否存在
if not exist "git_list.txt" (
echo git_list.txt 文件不存在!请创建并添加要拉取的 git 仓库 URL。
exit /b 1
) else (
echo ============ 检测到了 git 仓库清单文件 ====
)
rem 逐行读取 git_list.txt 中的 URL,并执行拉取操作
for /f %%i in (git_list.txt) do (
if exist "%%i" (
pushd "%%i"
git pull
popd
echo Pull %%i 完成!
echo ========================================
) else (
echo 目录 %%i 不存在,跳过拉取。
)
)
역사적 유산 문제
시스템 재설치 후 발생한 git
폴더 권한 파일 관련 오류: “안전하지 않은 저장소 (’/home/repon’은 다른 사용자가 소유하고 있습니다’)” 치명적인 오류
온라인에서 제안하는 방법들은 대부분 스택 오버플로우
에서 비롯된 것입니다
저장소 디렉터리에 대한 신뢰 추가: git config --global --add safe.directory /home/repon
수동으로 .gitconfig
설정 파일을 수정하여 디렉터리를 추가하고 신뢰하도록 지정합니다
[safe]
directory = /home/repon
위의 방법으로 처리한 후, 창고 업데이트는 정상적으로 되었지만, git pull
을 실행할 때마다 콘솔에 많은 경고 메시지가 표시되는데, 사용자 소유권 오류를 나타냅니다
데스크톱 컴퓨터 재설치
개발한 기계가 너무 오래돼서 시스템을 재설치하지 않았더니, 쓰레기 파일이 폭발해서 방법이 없었습니다. 시간을 내어 시스템을 재설치했는데, 또 이 권한 문제가 발생했습니다. 예전 스크립트가 실행되지 않고, 수정된 권한이 완전하지 않습니다.
새로운 방식을 사용하면 *
를 직접 추가하면, 이렇게 하면 git
이 모든 디렉터리를 자동으로 신뢰합니다
git config --global --add safe.directory "*"
사용자 권한 문제인지, 아니면 다들 windows
플랫폼에도 chown
과 유사한 명령이 있다는 것에 익숙하지 않은 건지 모르겠다. 폴더 소유자를 수정하는 방법인데, 만약 디렉토리가 많지 않다면 수동으로 소유자를 변경해도 괜찮다. 하지만 이 업무용 컴퓨터에는 도메인 정보가 추가되어 있는데, 회사에서 배포한 도메인에 이상이 있는지, 아니면 로컬 시스템 설정에 문제가 있는 건지 잘 모르겠다. 사용자 목록에서 로그인에 사용되는 사용자를 찾을 수 없었고, 결국 명령줄로 처리했다.
관리자 권한으로 powershell
스크립트 change_ower.ps1
을 실행하세요. 스크립트 파일 인코딩을 gbk
로 조정하는 것을 잊지 마세요. 중국어 운영체제에서 그래야 깨짐 없이 실행됩니다.
# 获取当前用户的用户名
$currentUserName = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
# 设置 PowerShell 的字符编码为 UTF-8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
# 要更改所有者的根目录路径
$rootDirectory = "G:\workspace" # 替换为实际的目录路径
# 递归遍历目录并更改文件和文件夹的所有者
Get-ChildItem -Path $rootDirectory -Recurse | ForEach-Object {
$itemPath = $_.FullName
# 检查是文件还是文件夹
if ($_ -is [System.IO.DirectoryInfo]) {
# 如果是文件夹,使用 icacls 更改所有者权限
$icaclsResult = icacls $itemPath /setowner "$currentUserName" 2>&1
if ($LASTEXITCODE -eq 0) {
Write-Host "已更改文件夹 $itemPath 的所有者为 $currentUserName"
} else {
Write-Host "无法更改文件夹 $itemPath 的所有者。错误信息: $icaclsResult"
}
} else {
# 如果是文件,使用 icacls 更改所有者权限
$takeownResult = icacls $itemPath /setowner "$currentUserName" 2>&1
if ($LASTEXITCODE -eq 0) {
# Write-Host "已更改文件 $itemPath 的所有者为 $currentUserName"
} else {
Write-Host "无法更改文件 $itemPath 的所有者。错误信息: $takeownResult"
}
}
}
예상치 못한 상황이 발생했는데, 스크립트 실행 시 출력되는 중국어 정보가 깨져 있었고, 콘솔 문자 인코딩을 설정하고 스크립트 인코딩을 조정했음에도 불구하고 여전히 엉망진창이었다. 머리가 제대로 작동하지 않는 것 같아서, 제어판-지역-언어 설정의 베타 기능을 활성화하고 전역적으로 유니코드 인코딩을 켰더니 스크립트는 정상적으로 실행되었지만 여러 개발 소프트웨어가 제대로 작동하지 않았다. 뒤돌아보니 자료를 정리하다가 스크립트 파일의 인코딩을 gbk
로 설정해야 한다는 것을 기억해냈다.