Зміна місця розташування .gitconfig у Windows


105

За замовчуванням у Windows Git розміщує глобальний .gitconfig в c:\documents and settings\user\

Як я можу змінити цю позицію, щоб зберегти .gitconfig c:\my_configuration_files\?

Чи можна це взагалі зробити?


Просто хотів додати, що я і в цьому стикаюся. У мене всі інші глобальні речі git config ("exludesfiles" та "attrirutesfile") у% userprofile% /. Git / .gitignore (так у папці), але .gitconfig я б хотів, щоб він сидів прямо біля них , але має бути в корені% userprofile% .. просто дратує.
РОБОТИ

6
Якийсь прогрес з моменту запитання? Мій .gitconfig за замовчуванням сидить на мережевому диску, це означає, що він не може прочитати його, коли я в автономному режимі.
Лех Жедзицький

Відповіді:


67

Якщо ви встановите HOMEна c:\my_configuration_files\, то мерзотник буде знайти .gitconfig там. Тут описано змінні середовища змін . Потрібно встановити змінну HOME, після чого знову відкрити будь-яке вікно cmd.exe. Використовуйте команду "set", щоб переконатися, що HOME дійсно вказує на потрібне значення.

Зміна HOME, звичайно, вплине і на інші програми. Однак, читаючи вихідний код git, це видається єдиним способом змінити розташування цих файлів без необхідності коригування командного рядка. Ви також повинні врахувати відповідь Стефана: ви можете встановити змінну GIT_CONFIG. Однак, щоб отримати --globalбажаний ефект, вам потрібно передати прапор усім викликам git (плюс будь-які локальні .git / config-файли ігноруються).


2
Хм, не впевнений, чи правильно я зрозумів, але чи не зміна HOME вплине також на всі інші додатки, які його використовують? Чи не існує способу змінити HOME, але локальний на Git?
Грак

Так, це вплине і на інші програми. Ви запитали, як змінити місце розташування, і я вам сказав. Дивіться мою редакцію.
Мартін проти Левіса

10
Хтось насправді змусив це працювати без побічних ефектів, коли переміщення ДОМАШНЯ зіпсує цілий набір інших речей?
Аде Міллер

Це, швидше за все, рішення, яке працює на платформі Windows. Це працювало і для мене. Я використав сценарій refreshenv Chocolatey для оновлення змінної середовища HOME, яку я встановив (змінна середовище користувача). Після цього я отримав потрібне розташування файлу.
Торе Аурстад

Мені довелося перевстановити Git, щоб це працювало. Якщо я щойно додав нову змінну середовища з назвою HOME і перемістив .gitconfigфайл у цю каталог, він не працював.
Csaba

46

Змінити каталог HOME, оскільки це неправильно. Краще створити символічне посилання для gitconfig до каталогу HOME.

  1. Перемістіть .gitconfig з домашнього каталогу користувача, до потрібного каталогу.
  2. Запустити командний рядок як адміністратор
  3. Перейдіть у домашній каталог свого користувача
  4. Введіть mklink .gitconfig \ PathForNewLocationOfConfig.gitconfig

9
Можливо, варто додати, що якщо ви запустите git config --global, щоб додати елемент у свою конфігурацію, що ваше посилання буде перезаписано фактичною копією використовуваного .gitconfig. Я зіткнувся з цим питанням під час тестування місця, де \ PathForNewLocationOfConfig.gitconfig була моєю папкою Dropbox
MotoWilliams

8
Якщо ваша .gitconfig розташована на мережевому диску, ви можете отримати повідомлення "Пристрій не підтримує символічні посилання", яке виключає цю опцію.
опівдні

4
Я не думаю, що це рішення допоможе нікому. У нашій компанії $HOMEпрацює на мережевому накопичувачі, і коли є якісь проблеми з мережевим підключенням, також посилання недоступне.
andreee

1
@MotoWilliams переглянув це у 2017 році: симпосилання залишається недоторканою після редагування з --global
Змія

2
Тут групова поліція (AD) встановлює HOMEDRIVE, HOMEPATH та HOMESHARE, але не звичайний, старий, простий ДОМАШНІЙ. За відсутності HOME, git, здається, використовує деяку комбінацію попередніх трьох. Але встановлення HOME (за допомогою звичайної методології для встановлення змінних оточуючих середовищ) працює: GIT використовує встановлене вами значення HOME, а групова політика не HOBberber HOME.
Девід І. Макінтош

29

Я вирішив цю проблему, використовуючи дещо інший підхід, який я бачив як для інших файлів конфігурації. Git Config підтримує включає в себе , що дозволяє вказати в конфігураційний файл в іншому місці. Це альтернативне місце потім імпортується та розширюється на місці так, ніби воно було частиною файлу .gitconfig. Отже, зараз у мене є лише один запис у .gitconfig:

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

Будь-які оновлення, написані Git у файлі .gitconfig, не замінять мій шлях включення. Це означає, що інколи мені може знадобитися переміщення значень з .gitconfig в my.config.


+1: немає незвичайних конфігурацій, і мій глобальний gitconfig - це те, що я зберігаю в самій git repo, тому слідкувати за тим, що там, - це моя робота. Внесення глобальних змін я просто вручну редагую глобальний файл. Тож для мене це прекрасно працює і не вимагає дивацтва, як зміна змінної середовища "ДОМАШНЯ", що є дивною ідеєю лише для того, щоб отримати конфігурацію Git там, де ви цього хочете. Зрештою, домашній каталог має інші значення для багатьох інших програм. Крім того, ви можете поставити іншу особу вгорі і зберегти ваші налаштування ключів однаковими для ідентичності цього рішення. Відмінно!
користувач62177541

2
Цікаво, чи можна надати git config записати у файл у файлі [include] d.
Джонатан Назаріо

1
@JonathanNazariogit config --file "included.file"
Перо П.


11

Я не майстер Git, але шукати рішення, яке працювало для мене найлегше, було просто зайти C:\Program Files (x86)\Git\etcі відкрити profileтекстовий редактор.

Звертається ifзаява на рядок 37 # Set up USER's home directory. Я вийняв ifзаяву і помістив у локальний каталог, що я хочу, щоб він був gitconfig, а потім просто скопіював свій існуючий файл gitconfig (був на мережевому диску) до цього місця.


Дякую тонну. Хоча всі інші параметри для мене не вдалися, це просто врятувало мені мільйон заяв git, помножене на 6 секунд: D ось що я зробив ... `HOME =" $ USERPROFILE \ Завантаження \ Інструменти \ Git_Config "`
PravyNandas

2
Слово "додому" (або все, що вам подібне до рядка: 37) більше не існує в git 2.24 (грудень 2019 року).
Френк

6

Для мене зміна місця розташування Start In (принаймні, git-gui) не вплинула на те, де воно шукало .gitconfig. Моє налаштування на роботі встановлюється U: для нашого будинку, але ми не маємо дозволу писати в U: безпосередньо, лише підкаталоги, які були створені для нас всередині, тому це було для мене вимикачем угод.

Я вирішив проблему, створивши пакетний скрипт, який би замінив змінні HOMEDRIVE та HOMEPATH env саме для цієї програми. Потім змінив ярлик меню "Пуск", щоб вказати на цей пакетний сценарій.


1
Я хотів би отримати більше інформації про те, що ви зробили, щоб виконати це виправлення.
Метт Касто

Чи можете ви поділитися своїм рішенням?
Сал,

4

Спочатку перевірте налаштування HOME, потім змініть HOME та HOMEDRIVE на існуючий dir.

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

потім змініть ДОМАШНИЙ і ДОМАШНИЙ на

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

3

Якщо ви перебуваєте у вікні та маєте проблеми або зі зміною змінних оточуючих, або mklinkчерез недостатню кількість привілеїв, простим рішенням вашої проблеми є запуск пакетів git в іншому місці.

Клацніть правою кнопкою миші на Git Bash.exe, натисніть властивості та змініть властивість "Почати в" на c:\my_configuration_files\.


Нічого, це повністю працює з легкістю. Створено новий %HOMEDRIVE%%HOMEPATH%ярлик і в розділі "Properties-> start in" змінено на `c: \ my_repo_folder`. Працював принадністю.
Шейн

2
Це не спрацювало для мене. Файл .gitconfig все ще завантажувався з мого домашнього каталогу
Дейв Б

3

Я хотів зробити те саме. Найкраще, що я міг знайти, це рішення @ MicTech. Однак, як зазначає @MotoWilliams, це не пережило жодних оновлень, внесених Git до файлу .gitconfig, який замінює посилання на новий файл, що містить лише нові налаштування.

Я вирішив це, написавши наступний скрипт PowerShell і запустивши його в сценарій запуску мого профілю. Кожен раз, коли він запускається, він копіює будь-які параметри, які були додані до .gitconfig користувача у глобальний, а потім замінює весь текст у файлі .gitconfig на заголовок та [include], який імпортує глобальний файл.

Я зберігаю глобальний файл .gitconfig у репортажі, а також безліч інших глобальних сценаріїв та інструментів. Все, що мені потрібно зробити, це пам’ятати, щоб перевірити будь-які зміни, які сценарій додає до мого глобального файлу.

Здається, це працює для мене досить прозоро. Сподіваюся, це допомагає!

9 вересня: оновлено, щоб виявити, коли нові записи, додані до конфігураційного файлу, є дублікатами та їх ігнорувати. Це корисно для таких інструментів, як 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.
kwill

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Показано, що оригінальний ДОМАШНЄ все ще діє.
Френк

1

Для мене це спрацювало дуже просто:

  1. Скопіюйте ".gitconfig" зі старого каталогу: у% USERPROFILE% (стандартний у "c: \ users \ username")
  2. Клацніть правою кнопкою миші на піктограмах запуску GITGUI та GITBASH та змініть "run in": "% HOMEDRIVE %% HOMEPATH%" на "% USERPROFILE%". Зрозуміло, ви можете використовувати будь-який інший каталог замість "% USERPROFILE%".

знімок екрана раніше

екран, знятий після


0

Рішення без необхідності змінювати змінну
ОС ОС Windows HOME :
Версія Windows 10 git: 2.27.0.Windows.1

Я використовую портативну версію Git, тому всі мої конфігураційні файли знаходяться на моєму накопичувачі (E :). Це для мене працювало:

  1. Завантажте портативний Git з https://git-scm.com/ . Запустіть файл та встановіть його у потрібному місці. Я встановив його в E: \ git .
  2. Запустіть git-bash.exe з E: \ git .
  3. Я хотів поставити .gitconfigі інші файли bash в E , тому я створив папку під назвою home, де я хочу їх усіх.
    mkdir home
  4. Перейдіть у папку тощо і відкрийте файл з назвою профіль (у моєму випадку це E: \ git \ etc \ profile)
  5. Додайте абсолютний шлях до домашнього каталогу, який ми створили (або до каталогу, де ви хочете, щоб ваш .gitconfig файл знаходився) в кінці файлу профілю .
    HOME="E:\git\home"

Тепер він більше не шукає в каталозі C: ​​\ Users <username> для .gitconfig, а лише шукає вказаний вище шлях.

$ git config --global --list
fatal: unable to read config file 'E:/git/home/.gitconfig': No such file or directory

Це призвело до помилки, оскільки там ще немає файлу .gitconfig. Це лише для того, щоб продемонструвати, що ми успішно змінили розташування файлу .gitconfig без зміни каталогу HOME у Windows.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.