การเปลี่ยนตำแหน่ง. gitconfig บน Windows


105

โดยค่าเริ่มต้นใน Windows Git จะวาง global .gitconfig ไว้ c:\documents and settings\user\

ฉันจะเปลี่ยนตำแหน่งนั้นได้อย่างไรเพื่อให้. gitconfig ถูกเก็บไว้ในc:\my_configuration_files\?

สามารถทำได้เลยหรือไม่?


แค่อยากจะเพิ่มฉันก็เจอปัญหานี้เช่นกัน ฉันมีสิ่งกำหนดค่า git อื่น ๆ ทั้งหมดของฉัน ("exludesfiles" และ "attrirutesfile") ใน% userprofile% /. git / .gitignore (ในโฟลเดอร์) แต่. gitconfig ฉันชอบที่จะให้มันนั่งติดกับพวกเขา แต่ต้องอยู่ในรูทของ% userprofile% .. น่ารำคาญจริงๆ
WORMSS

6
มีความคืบหน้าตั้งแต่มีการถามคำถามหรือไม่? . gitconfig ของฉันอยู่ในไดรฟ์เครือข่ายตามค่าเริ่มต้นซึ่งหมายความว่าไม่สามารถอ่านได้เมื่อฉันออฟไลน์
Lech Rzedzicki

คำตอบ:


67

หากคุณตั้งค่าHOMEเป็นc:\my_configuration_files\git จะพบ. gitconfig ที่นั่น การแก้ไขตัวแปรสภาพแวดล้อมที่มีการอธิบายไว้ที่นี่ คุณต้องตั้งค่าตัวแปร HOME จากนั้นเปิดหน้าต่าง cmd.exe ใหม่ ใช้คำสั่ง "set" เพื่อตรวจสอบว่า HOME ชี้ไปยังค่าที่ถูกต้อง

แน่นอนว่าการเปลี่ยน HOME จะส่งผลกระทบต่อแอปพลิเคชันอื่น ๆ ด้วย อย่างไรก็ตามจากการอ่านซอร์สโค้ดของ git ดูเหมือนว่าจะเป็นวิธีเดียวที่จะเปลี่ยนตำแหน่งของไฟล์เหล่านี้โดยไม่จำเป็นต้องปรับบรรทัดคำสั่ง คุณควรพิจารณาการตอบสนองของ Stefan: คุณสามารถตั้งค่าตัวแปร GIT_CONFIG อย่างไรก็ตามเพื่อให้ได้ผลตามที่คุณต้องการคุณต้องส่ง--globalแฟล็กไปยังการเรียกใช้ git ทั้งหมด (รวมถึงไฟล์. git / config ในเครื่องจะถูกละเว้น)


2
อืมไม่แน่ใจว่าเข้าใจถูกมั้ย แต่ไม่เปลี่ยน HOME มีผลกับแอพพลิเคชั่นอื่น ๆ ทั้งหมดที่ใช้หรือเปล่า ไม่มีวิธีเปลี่ยน HOME แต่ local เป็น Git?
Rook

ใช่มันจะมีผลกับแอพพลิเคชั่นอื่น ๆ ด้วย คุณถามว่าจะเปลี่ยนสถานที่อย่างไรฉันก็บอกคุณแล้ว ดูการแก้ไขของฉัน
Martin v. Löwis

10
มีใครใช้งานได้จริงโดยไม่มีผลข้างเคียงจากการย้ายบ้านไปยุ่งกับสิ่งอื่น ๆ ทั้งหมด?
Ade Miller

สิ่งนี้น่าจะเป็นโซลูชันที่ทำงานบนแพลตฟอร์ม Windows มันยังใช้ได้กับฉัน ฉันใช้สคริปต์ refreshhenv ของ Chocolatey เพื่อรีเฟรชตัวแปรสภาพแวดล้อม HOME ที่ฉันตั้งไว้ (ตัวแปรสภาพแวดล้อมผู้ใช้) หลังจากนั้นฉันก็ได้ตำแหน่งไฟล์ที่ต้องการ
Tore Aurstad

ฉันต้องติดตั้ง Git ใหม่เพื่อให้ใช้งานได้ ถ้าฉันเพิ่งเพิ่มตัวแปรสภาพแวดล้อมใหม่ชื่อ HOME และย้าย.gitconfigไฟล์ไปยังไดเร็กทอรีนั้นก็ไม่ได้ผล
Csa77

46

เปลี่ยนไดเรกทอรี HOME สำหรับสิ่งนี้ไม่ถูกต้อง ที่ดีกว่าคือสร้างลิงก์สัญลักษณ์สำหรับ gitconfig ไปยังไดเรกทอรี HOME

  1. ย้าย. gitconfig ของคุณจากโฮมไดเร็กทอรีของผู้ใช้ไปยังไดเร็กทอรีที่คุณต้องการ
  2. เรียกใช้บรรทัดคำสั่งในฐานะผู้ดูแลระบบ
  3. ไปที่โฮมไดเร็กทอรีผู้ใช้ของคุณ
  4. ป้อน mklink .gitconfig \ PathForNewLocationOfConfig.gitconfig

9
อาจคุ้มค่าที่จะเพิ่มว่าหากคุณเรียกใช้ git config --global เพื่อเพิ่มรายการใน config ของคุณ symlink ของคุณจะถูกเขียนทับด้วยสำเนาจริงของ. gitconfig ที่ใช้อยู่ ฉันพบปัญหานี้เมื่อทดสอบตำแหน่งที่ \ PathForNewLocationOfConfig.gitconfig เป็นโฟลเดอร์ Dropbox ของฉัน
MotoWilliams

8
หาก. gitconfig ของคุณอยู่บนไดรฟ์เครือข่ายคุณอาจได้รับข้อความ "อุปกรณ์ไม่รองรับลิงก์สัญลักษณ์" ซึ่งจะออกกฎของตัวเลือกนี้
เที่ยงและ

4
ฉันไม่คิดว่าโซลูชันนี้จะใช้ได้กับทุกคน ใน บริษัท ของเรา$HOMEอยู่ในไดรฟ์เครือข่ายและเมื่อใดก็ตามที่มีปัญหากับการเชื่อมต่อเครือข่ายลิงก์ก็ไม่สามารถเข้าถึงได้
andreee

1
@MotoWilliams ทบทวนสิ่งนี้ในปี 2017: symlink ยังคงเหมือนเดิมหลังจากแก้ไขด้วย --global
Snake

3
ที่นี่ตำรวจกลุ่ม (AD) ตั้งค่า HOMEDRIVE, HOMEPATH และ HOMESHARE แต่ไม่ใช่แบบธรรมดาบ้านเก่าที่เรียบง่าย ในกรณีที่ไม่มี HOME ดูเหมือนว่า git จะใช้การผสมผสานระหว่างสามอย่างก่อนหน้านี้ แต่การตั้งค่า HOME (โดยใช้วิธีการปกติสำหรับการตั้งค่าตัวแปรสภาพแวดล้อมเฉพาะผู้ใช้) ใช้งานได้: GIT ใช้ค่า HOME ที่คุณตั้งไว้และ grouppolicy จะไม่จับภาพ HOME
David I. McIntosh

30

ฉันได้แก้ไขปัญหานี้โดยใช้วิธีการที่แตกต่างออกไปเล็กน้อยที่ฉันเห็นว่าใช้ได้กับไฟล์กำหนดค่าอื่น Git Configรองรับการรวมที่ช่วยให้คุณชี้ไปที่ไฟล์คอนฟิกูเรชันในตำแหน่งอื่น จากนั้นตำแหน่งอื่นจะถูกนำเข้าและขยายเข้าที่ราวกับว่าเป็นส่วนหนึ่งของไฟล์. gitconfig ตอนนี้ฉันมีรายการเดียวใน. gitconfig:

[include]
   path = c:\\path\\to\\my.config

การอัปเดตใด ๆ ที่เขียนโดย Git ไปยังไฟล์. gitconfig จะไม่เขียนทับเส้นทางการรวมของฉัน หมายความว่าบางครั้งฉันอาจต้องย้ายค่าจาก. gitconfig ไปที่ my.config


+1: ไม่มีการกำหนดค่าแปลก ๆ และ gitconfig ทั่วโลกของฉันเป็นสิ่งที่ฉันเก็บไว้ใน git repo เองดังนั้นการติดตามสิ่งที่อยู่ในนั้นคืองานของฉัน เมื่อทำการเปลี่ยนแปลงส่วนกลางฉันเพียงแค่แก้ไขไฟล์ส่วนกลางด้วยมือ ดังนั้นสิ่งนี้จึงทำงานได้อย่างสมบูรณ์แบบสำหรับฉันและไม่ต้องมีความแปลกประหลาดเช่นการเปลี่ยนตัวแปรสภาพแวดล้อม "HOME" ซึ่งเป็นแนวคิดที่แปลกเพียงเพื่อให้ได้รับการกำหนดค่าของ Git ในที่ที่คุณต้องการ โฮมไดเร็กทอรีหลังจากทั้งหมดมีความหมายอื่นสำหรับโปรแกรมอื่น ๆ อีกมากมาย นอกจากนี้คุณสามารถใส่ข้อมูลประจำตัวที่แตกต่างกันไว้ที่ด้านบนและรักษาการตั้งค่าคีย์ของคุณให้เหมือนกันในทุกข้อมูลประจำตัวด้วยโซลูชันนี้ ยอดเยี่ยม!
user62177541

2
ฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะให้ git config เขียนไปยังไฟล์ในไฟล์ [include] d แทน
Jonathan Nazario

1
@JonathanNazariogit config --file "included.file"
Pero P.


11

ฉันไม่ใช่ Git master แต่จากการค้นหาวิธีแก้ปัญหาที่ง่ายที่สุดสำหรับฉันคือไปที่C:\Program Files (x86)\Git\etcและเปิดprofileในโปรแกรมแก้ไขข้อความ

มีเป็นifคำสั่งในบรรทัด # Set up USER's home directory37 ฉันหยิบifคำสั่งออกมาและใส่ในไดเร็กทอรีท้องถิ่นที่ฉันต้องการให้ gitconfig เป็นจากนั้นฉันก็คัดลอกไฟล์ gitconfig ที่มีอยู่ (อยู่ในไดรฟ์เครือข่าย) ไปยังตำแหน่งนั้น


ขอบคุณมาก แม้ว่าตัวเลือกอื่น ๆ ทั้งหมดจะล้มเหลวสำหรับฉัน แต่สิ่งนี้ช่วยฉันได้หนึ่งล้านคำสั่ง git คูณด้วย 6 วินาที: D นี่คือสิ่งที่ฉันทำ ... `HOME =" $ USERPROFILE \ Downloads \ Tools \ Git_Config "`
PravyNandas

2
คำว่า 'บ้าน' (หรืออะไรก็ได้ที่ดูคล้ายกับคุณบรรทัดที่ 37) ไม่มีอยู่ใน git 2.24 อีกต่อไป (ธันวาคม 2019)
Frank Nocke

6

สำหรับฉันการเปลี่ยนตำแหน่งเริ่มต้นใน (ของ git-gui เป็นอย่างน้อย) ไม่ส่งผลกระทบต่อตำแหน่งที่ค้นหา. gitconfig การตั้งค่าของฉันในที่ทำงานติดตั้ง U: สำหรับบ้านของเรา แต่เราไม่ได้รับอนุญาตให้เขียนเป็น U: โดยตรงไดเร็กทอรีย่อยเท่านั้นที่สร้างขึ้นสำหรับเราภายในดังนั้นนี่จึงเป็นตัวทำลายข้อตกลงสำหรับฉัน

ฉันแก้ปัญหาด้วยการสร้าง batch script ซึ่งจะแทนที่ตัวแปร HOMEDRIVE และ HOMEPATH env สำหรับแอปพลิเคชันนั้นเท่านั้น จากนั้นเปลี่ยนทางลัดเมนูเริ่มของฉันให้ชี้ไปที่สคริปต์ชุดนั้นแทน


1
ฉันต้องการข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่คุณทำเพื่อแก้ไขปัญหานี้ให้สำเร็จ
Matt Casto

คุณสามารถแบ่งปันวิธีแก้ปัญหาของคุณได้หรือไม่?
Sal

4

ขั้นแรกให้ตรวจสอบการตั้งค่า HOME จากนั้นเปลี่ยน HOME และ HOMEDRIVE เป็น dir ที่มีอยู่

c:\git>set HOME
HOME=U:\
HOMEDRIVE=U:
HOMEPATH=\

จากนั้นเปลี่ยน HOME และ HOMEDRIVE โดย

set HOME=c:\tmp
set HOMEDRIVE=C:

3

หากคุณใช้ windows และมีปัญหาในการเปลี่ยนตัวแปรสภาพแวดล้อมหรือmklinkเนื่องจากสิทธิ์ไม่เพียงพอวิธีแก้ปัญหาง่ายๆของคุณคือเริ่ม git batch ในตำแหน่งอื่น

เพียงแค่คลิกขวาบน Git Bash.exe คลิกคุณสมบัติและการเปลี่ยนแปลง "เริ่มต้นใน" c:\my_configuration_files\คุณสมบัติการ


ว้าวนี้ทำงานได้อย่างง่ายดายโดยสิ้นเชิง สร้างทางลัดใหม่และภายใต้ "properties-> start in" เปลี่ยน%HOMEDRIVE%%HOMEPATH%เป็น "c: \ my_repo_folder" ใช้งานได้อย่างมีเสน่ห์
เชน

2
สิ่งนี้ไม่ได้ผลสำหรับฉัน ไฟล์. gitconfig ยังคงโหลดจากโฮมไดเร็กทอรีของฉัน
Dave B

3

ฉันอยากจะทำสิ่งเดียวกัน สิ่งที่ดีที่สุดที่ฉันสามารถหาได้คือโซลูชันของ @ 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
}

2

ในฐานะคนที่สนใจเรื่องนี้มานานมาก ดูจากคู่มือ:

$ XDG_CONFIG_HOME / git / config - ไฟล์คอนฟิกูเรชันเฉพาะผู้ใช้ที่สอง ถ้า$XDG_CONFIG_HOMEไม่ได้ตั้งค่าไว้หรือว่างเปล่าจะใช้ $ HOME / .config / git / config ตัวแปรค่าเดียวที่ตั้งค่าในไฟล์นี้จะถูกเขียนทับโดยสิ่งที่อยู่ใน ~ / .gitconfig เป็นความคิดที่ดีที่จะไม่สร้างไฟล์นี้หากบางครั้งคุณใช้ Git เวอร์ชันเก่าเนื่องจากมีการเพิ่มการรองรับไฟล์นี้เมื่อไม่นานมานี้

ซึ่งเพิ่งเพิ่มเมื่อเร็ว ๆ นี้ การถ่ายโอนข้อมูลนี้มาจาก 2.15.0

ใช้ได้ผลสำหรับฉัน


นี่เป็นวิธีแก้ปัญหาที่ง่ายที่สุดล่วงล้ำน้อยที่สุดและน่าเชื่อถือที่สุดใน Windows
กิโลวัตต์

2
  1. เปลี่ยนเป็นโฟลเดอร์ %PROGRAMFILES%\Git\etc
  2. แก้ไขไฟล์ profile
  3. เพิ่มในบรรทัดแรก HOME="c:\location_were_you_want_gitconfig"
  4. เสร็จแล้ว

หมายเหตุ:โดยทั่วไปสิทธิ์ของไฟล์จะถูก จำกัด ดังนั้นให้เปลี่ยนตามไม่เช่นนั้นคุณจะไม่สามารถบันทึกการเปลี่ยนแปลงของคุณได้


สิ่งนี้ใช้ไม่ได้ใน git 2.24, Win10, ธันวาคม 2019 git config --list --show-originแสดงว่า HOME เดิมยังคงใช้งานได้
Frank Nocke

1

สำหรับฉันมันทำงานง่ายมาก:

  1. คัดลอก ".gitconfig" จากไดเร็กทอรีเก่า: ไปยัง% USERPROFILE% (มาตรฐานใน "c: \ users \ username")
  2. คลิกขวาที่ไอคอนเริ่มต้นของ GITGUI และ GITBASH แล้วเปลี่ยน "run in": "% HOMEDRIVE %% HOMEPATH%" เป็น "% USERPROFILE%" คุณสามารถใช้ไดเรกทอรีอื่นแทน "% USERPROFILE%" ได้

ภาพหน้าจอก่อน

ภาพหน้าจอหลังจาก


0

วิธีแก้ไขโดยไม่ต้องเปลี่ยน Windows HOME variable
OS: Windows 10
git version: 2.27.0.windows.1

ฉันใช้ Git เวอร์ชันพกพาดังนั้นไฟล์กำหนดค่าทั้งหมดของฉันจึงอยู่ในไดรฟ์ปากกา (E :) นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน:

  1. ดาวน์โหลดแบบพกพา Git จากhttps://git-scm.com/ เรียกใช้ไฟล์และติดตั้งในตำแหน่งที่ต้องการ ฉันติดตั้งในE: \ git E:
  2. Run -git bash.exeจากE: \ คอมไพล์
  3. ฉันต้องการใส่.gitconfigและไฟล์ bash อื่น ๆ ในEดังนั้นฉันจึงสร้างโฟลเดอร์ชื่อบ้านที่ฉันต้องการทั้งหมด
    mkdir home
  4. ไปที่โฟลเดอร์etcและเปิดไฟล์ชื่อprofile (ในกรณีของฉันคือ E: \ git \ etc \ profile)
  5. เพิ่มพา ธ สัมบูรณ์ไปยังโฮมไดเร็กทอรีที่เราสร้างขึ้น (หรือไปยังไดเร็กทอรีที่คุณต้องการให้ไฟล์. gitconfig ของคุณอยู่) ที่ส่วนท้ายของไฟล์โปรไฟล์
    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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.