โดยค่าเริ่มต้นใน Windows Git จะวาง global .gitconfig ไว้ c:\documents and settings\user\
ฉันจะเปลี่ยนตำแหน่งนั้นได้อย่างไรเพื่อให้. gitconfig ถูกเก็บไว้ในc:\my_configuration_files\
?
สามารถทำได้เลยหรือไม่?
โดยค่าเริ่มต้นใน Windows Git จะวาง global .gitconfig ไว้ c:\documents and settings\user\
ฉันจะเปลี่ยนตำแหน่งนั้นได้อย่างไรเพื่อให้. gitconfig ถูกเก็บไว้ในc:\my_configuration_files\
?
สามารถทำได้เลยหรือไม่?
คำตอบ:
หากคุณตั้งค่าHOME
เป็นc:\my_configuration_files\
git จะพบ. gitconfig ที่นั่น การแก้ไขตัวแปรสภาพแวดล้อมที่มีการอธิบายไว้ที่นี่ คุณต้องตั้งค่าตัวแปร HOME จากนั้นเปิดหน้าต่าง cmd.exe ใหม่ ใช้คำสั่ง "set" เพื่อตรวจสอบว่า HOME ชี้ไปยังค่าที่ถูกต้อง
แน่นอนว่าการเปลี่ยน HOME จะส่งผลกระทบต่อแอปพลิเคชันอื่น ๆ ด้วย อย่างไรก็ตามจากการอ่านซอร์สโค้ดของ git ดูเหมือนว่าจะเป็นวิธีเดียวที่จะเปลี่ยนตำแหน่งของไฟล์เหล่านี้โดยไม่จำเป็นต้องปรับบรรทัดคำสั่ง คุณควรพิจารณาการตอบสนองของ Stefan: คุณสามารถตั้งค่าตัวแปร GIT_CONFIG อย่างไรก็ตามเพื่อให้ได้ผลตามที่คุณต้องการคุณต้องส่ง--global
แฟล็กไปยังการเรียกใช้ git ทั้งหมด (รวมถึงไฟล์. git / config ในเครื่องจะถูกละเว้น)
.gitconfig
ไฟล์ไปยังไดเร็กทอรีนั้นก็ไม่ได้ผล
เปลี่ยนไดเรกทอรี HOME สำหรับสิ่งนี้ไม่ถูกต้อง ที่ดีกว่าคือสร้างลิงก์สัญลักษณ์สำหรับ gitconfig ไปยังไดเรกทอรี HOME
$HOME
อยู่ในไดรฟ์เครือข่ายและเมื่อใดก็ตามที่มีปัญหากับการเชื่อมต่อเครือข่ายลิงก์ก็ไม่สามารถเข้าถึงได้
ฉันได้แก้ไขปัญหานี้โดยใช้วิธีการที่แตกต่างออกไปเล็กน้อยที่ฉันเห็นว่าใช้ได้กับไฟล์กำหนดค่าอื่น Git Configรองรับการรวมที่ช่วยให้คุณชี้ไปที่ไฟล์คอนฟิกูเรชันในตำแหน่งอื่น จากนั้นตำแหน่งอื่นจะถูกนำเข้าและขยายเข้าที่ราวกับว่าเป็นส่วนหนึ่งของไฟล์. gitconfig ตอนนี้ฉันมีรายการเดียวใน. gitconfig:
[include]
path = c:\\path\\to\\my.config
การอัปเดตใด ๆ ที่เขียนโดย Git ไปยังไฟล์. gitconfig จะไม่เขียนทับเส้นทางการรวมของฉัน หมายความว่าบางครั้งฉันอาจต้องย้ายค่าจาก. gitconfig ไปที่ my.config
git config --file "included.file"
ดูในไฟล์และสิ่งแวดล้อมgit help config
ส่วนหนึ่งของ
ฉันไม่ใช่ Git master แต่จากการค้นหาวิธีแก้ปัญหาที่ง่ายที่สุดสำหรับฉันคือไปที่C:\Program Files (x86)\Git\etc
และเปิดprofile
ในโปรแกรมแก้ไขข้อความ
มีเป็นif
คำสั่งในบรรทัด # Set up USER's home directory
37 ฉันหยิบif
คำสั่งออกมาและใส่ในไดเร็กทอรีท้องถิ่นที่ฉันต้องการให้ gitconfig เป็นจากนั้นฉันก็คัดลอกไฟล์ gitconfig ที่มีอยู่ (อยู่ในไดรฟ์เครือข่าย) ไปยังตำแหน่งนั้น
สำหรับฉันการเปลี่ยนตำแหน่งเริ่มต้นใน (ของ git-gui เป็นอย่างน้อย) ไม่ส่งผลกระทบต่อตำแหน่งที่ค้นหา. gitconfig การตั้งค่าของฉันในที่ทำงานติดตั้ง U: สำหรับบ้านของเรา แต่เราไม่ได้รับอนุญาตให้เขียนเป็น U: โดยตรงไดเร็กทอรีย่อยเท่านั้นที่สร้างขึ้นสำหรับเราภายในดังนั้นนี่จึงเป็นตัวทำลายข้อตกลงสำหรับฉัน
ฉันแก้ปัญหาด้วยการสร้าง batch script ซึ่งจะแทนที่ตัวแปร HOMEDRIVE และ HOMEPATH env สำหรับแอปพลิเคชันนั้นเท่านั้น จากนั้นเปลี่ยนทางลัดเมนูเริ่มของฉันให้ชี้ไปที่สคริปต์ชุดนั้นแทน
ขั้นแรกให้ตรวจสอบการตั้งค่า HOME จากนั้นเปลี่ยน HOME และ HOMEDRIVE เป็น dir ที่มีอยู่
c:\git>set HOME
HOME=U:\
HOMEDRIVE=U:
HOMEPATH=\
จากนั้นเปลี่ยน HOME และ HOMEDRIVE โดย
set HOME=c:\tmp
set HOMEDRIVE=C:
หากคุณใช้ windows และมีปัญหาในการเปลี่ยนตัวแปรสภาพแวดล้อมหรือmklink
เนื่องจากสิทธิ์ไม่เพียงพอวิธีแก้ปัญหาง่ายๆของคุณคือเริ่ม git batch ในตำแหน่งอื่น
เพียงแค่คลิกขวาบน Git Bash.exe คลิกคุณสมบัติและการเปลี่ยนแปลง "เริ่มต้นใน" c:\my_configuration_files\
คุณสมบัติการ
%HOMEDRIVE%%HOMEPATH%
เป็น "c: \ my_repo_folder" ใช้งานได้อย่างมีเสน่ห์
ฉันอยากจะทำสิ่งเดียวกัน สิ่งที่ดีที่สุดที่ฉันสามารถหาได้คือโซลูชันของ @ MicTech อย่างไรก็ตามตามที่ @MotoWilliams ชี้ให้เห็นสิ่งนี้ไม่สามารถใช้งานได้กับการอัปเดตใด ๆ ที่ทำโดย Git ไปยังไฟล์. gitconfig ซึ่งแทนที่ลิงก์ด้วยไฟล์ใหม่ที่มีเฉพาะการตั้งค่าใหม่
ฉันแก้ไขสิ่งนี้โดยเขียนสคริปต์ PowerShell ต่อไปนี้และเรียกใช้ในสคริปต์เริ่มต้นโปรไฟล์ของฉัน ทุกครั้งที่เรียกใช้งานจะคัดลอกการตั้งค่าใด ๆ ที่เพิ่มไปยัง. gitconfig ของผู้ใช้ไปยัง global one จากนั้นแทนที่ข้อความทั้งหมดในไฟล์. gitconfig ด้วยและ [include] ส่วนหัวที่นำเข้าไฟล์ส่วนกลาง
ฉันเก็บไฟล์. gitconfig ส่วนกลางไว้ใน repo พร้อมกับสคริปต์และเครื่องมือส่วนกลางอื่น ๆ อีกมากมาย สิ่งที่ฉันต้องทำคืออย่าลืมตรวจสอบการเปลี่ยนแปลงใด ๆ ที่สคริปต์ต่อท้ายไฟล์ส่วนกลางของฉัน
ดูเหมือนว่าจะทำงานได้ค่อนข้างโปร่งใสสำหรับฉัน หวังว่าจะช่วยได้!
9 กันยายน:อัปเดตเพื่อตรวจจับเมื่อรายการใหม่ที่เพิ่มลงในไฟล์ config ซ้ำกันและละเว้นรายการเหล่านั้น สิ่งนี้มีประโยชน์สำหรับเครื่องมือเช่น SourceTree ซึ่งจะเขียนการอัปเดตใหม่หากไม่พบสิ่งที่มีอยู่และไม่ปฏิบัติตามรวม
function git-config-update
{
$localPath = "$env:USERPROFILE\.gitconfig".replace('\', "\\")
$globalPath = "C:\src\github\Global\Git\gitconfig".replace('\', "\\")
$redirectAutoText = "# Generated file. Do not edit!`n[include]`n path = $globalPath`n`n"
$localText = get-content $localPath
$diffs = (compare-object -ref $redirectAutoText.split("`n") -diff ($localText) |
measure-object).count
if ($diffs -eq 0)
{
write-output ".gitconfig unchanged."
return
}
$skipLines = 0
$diffs = (compare-object -ref ($redirectAutoText.split("`n") |
select -f 3) -diff ($localText | select -f 3) | measure-object).count
if ($diffs -eq 0)
{
$skipLines = 4
write-warning "New settings appended to $localPath...`n "
}
else
{
write-warning "New settings found in $localPath...`n "
}
$localLines = (get-content $localPath | select -Skip $skipLines) -join "`n"
$newSettings = $localLines.Split(@("["), [StringSplitOptions]::RemoveEmptyEntries) |
where { ![String]::IsNullOrWhiteSpace($_) } | %{ "[$_".TrimEnd() }
$globalLines = (get-content $globalPath) -join "`n"
$globalSettings = $globalLines.Split(@("["), [StringSplitOptions]::RemoveEmptyEntries)|
where { ![String]::IsNullOrWhiteSpace($_) } | %{ "[$_".TrimEnd() }
$appendSettings = ($newSettings | %{ $_.Trim() } |
where { !($globalSettings -contains $_.Trim()) })
if ([string]::IsNullOrWhitespace($appendSettings))
{
write-output "No new settings found."
}
else
{
echo $appendSettings
add-content $globalPath ("`n# Additional settings added from $env:COMPUTERNAME on " + (Get-Date -displayhint date) + "`n" + $appendSettings)
}
set-content $localPath $redirectAutoText -force
}
ในฐานะคนที่สนใจเรื่องนี้มานานมาก ดูจากคู่มือ:
$ XDG_CONFIG_HOME / git / config - ไฟล์คอนฟิกูเรชันเฉพาะผู้ใช้ที่สอง ถ้า$XDG_CONFIG_HOME
ไม่ได้ตั้งค่าไว้หรือว่างเปล่าจะใช้ $ HOME / .config / git / config ตัวแปรค่าเดียวที่ตั้งค่าในไฟล์นี้จะถูกเขียนทับโดยสิ่งที่อยู่ใน ~ / .gitconfig เป็นความคิดที่ดีที่จะไม่สร้างไฟล์นี้หากบางครั้งคุณใช้ Git เวอร์ชันเก่าเนื่องจากมีการเพิ่มการรองรับไฟล์นี้เมื่อไม่นานมานี้
ซึ่งเพิ่งเพิ่มเมื่อเร็ว ๆ นี้ การถ่ายโอนข้อมูลนี้มาจาก 2.15.0
ใช้ได้ผลสำหรับฉัน
%PROGRAMFILES%\Git\etc
profile
HOME="c:\location_were_you_want_gitconfig"
หมายเหตุ:โดยทั่วไปสิทธิ์ของไฟล์จะถูก จำกัด ดังนั้นให้เปลี่ยนตามไม่เช่นนั้นคุณจะไม่สามารถบันทึกการเปลี่ยนแปลงของคุณได้
git config --list --show-origin
แสดงว่า HOME เดิมยังคงใช้งานได้
สำหรับฉันมันทำงานง่ายมาก:
วิธีแก้ไขโดยไม่ต้องเปลี่ยน Windows HOME variable
OS: Windows 10
git version: 2.27.0.windows.1
ฉันใช้ Git เวอร์ชันพกพาดังนั้นไฟล์กำหนดค่าทั้งหมดของฉันจึงอยู่ในไดรฟ์ปากกา (E :) นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน:
.gitconfig
และไฟล์ bash อื่น ๆ ในEดังนั้นฉันจึงสร้างโฟลเดอร์ชื่อบ้านที่ฉันต้องการทั้งหมดmkdir home
HOME="E:\git\home"
ตอนนี้ไม่ได้ค้นหาในไดเร็กทอรี C: \ Users <username> สำหรับ. gitconfig อีกต่อไป แต่ดูเฉพาะใน set path ด้านบนเท่านั้น
$ git config --global --list
fatal: unable to read config file 'E:/git/home/.gitconfig': No such file or directory
มันเกิดข้อผิดพลาดเนื่องจากยังไม่มีไฟล์. gitconfig อยู่ที่นั่น นี่เป็นเพียงการแสดงให้เห็นว่าเราได้เปลี่ยนตำแหน่งของไฟล์. gitconfig สำเร็จโดยไม่ต้องเปลี่ยนไดเรกทอรี HOME ใน Windows