it-swarm.dev

من أين تأتي الإعدادات في تكوين Git الخاص بي؟

لقد لاحظت أن لديّ قائمتين لـ core.autocrlf عندما أقوم بتشغيل git config -l

$ git config -l
core.symlinks=false
core.autocrlf=false
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
user.name=name
[email protected]
core.autocrlf=true

الثلاثة الأخيرة (من user.name down) هم الوحيدون في ملف c:\users\username\.gitconfig الخاص بي. من أين تأتي جميع الأشياء الأخرى؟ لماذا core.autocrlf مدرج مرتين؟

هذا مع msysgit 1.8.3 ولدي أيضًا تثبيت SourceTree (Windows 7). في SourceTree ، ألغيت تحديد "السماح لـ SourceTree بتعديل ملفات Git config الخاصة بك"

77
RyanW

بوابة الشيكات 4 أماكن لملف التكوين:

  1. ملف نظام .gitconfig الخاص بجهازك.
  2. ملف المستخدم .gitconfig الموجود في ~/.gitconfig.
  3. ملف تكوين ثاني خاص بالمستخدم موجود في $XDG_CONFIG_HOME/git/config أو $HOME/.config/git/config.
  4. ملف تكوين repo المحلي .git/config.

تتالي الإعدادات بالترتيب التالي ، مع إضافة كل ملف أو تجاوز الإعدادات المحددة في الملف أعلاه.

  1. نظام التكوين.
  2. التكوين المستخدم.
  3. التكوين الريبو محددة.

يمكنك معرفة ما حدده كل ملف باستخدام الأوامر التالية:

# System, applies to entire machine and all users
$ git config --system --list
$ git config --system --edit

# User defined
$ git config --global --list
$ git config --global --edit

يمكنك معرفة ما حدده ملف الريبو فقط عن طريق فتح الملف .git/config لذلك الريبو.

إذا كنت تستخدم msysgit على Windows ، فربما تجد ملف ~/.gitconfig الخاص بالمستخدم حيث يشير %homepath% إلى ما إذا كنت تستخدم echo %homepath% من موجه أوامر Windows.

من وثائق git config :

إذا لم يتم تعيينها بشكل صريح مع --file ، فهناك أربعة ملفات حيث يبحث git config عن خيارات التكوين:

  • $(prefix)/etc/gitconfig

    ملف التكوين على مستوى النظام.

  • $XDG_CONFIG_HOME/git/config

    ملف التكوين الثاني الخاص بالمستخدم. إذا لم يتم تعيين $XDG_CONFIG_HOME أو فارغ ، فسيتم استخدام $HOME/.config/git/config. سيتم استبدال أي متغير ذو قيمة مفردة تم تعيينه في هذا الملف بأي شيء موجود في ~/.gitconfig. من المستحسن عدم إنشاء هذا الملف إذا كنت تستخدم أحيانًا إصدارات أقدم من Git ، حيث تمت إضافة دعم لهذا الملف مؤخرًا إلى حد ما.

  • ~/.gitconfig

    ملف التكوين الخاص بالمستخدم. وتسمى أيضا ملف التكوين "العالمي".

  • $GIT_DIR/config

    مستودع التكوين ملف التكوين.

إذا لم يتم تقديم خيارات أخرى ، فستقرأ جميع خيارات القراءة جميع هذه الملفات المتاحة. في حالة عدم توفر ملف التكوين العام أو ملف النظام بأكمله ، سيتم تجاهله. إذا كان ملف تكوين المستودع غير متاح أو قابل للقراءة ، فسوف يخرج git config برمز خطأ غير صفري. ومع ذلك ، لن يتم إصدار رسالة خطأ في أي من الحالتين.

تتم قراءة الملفات بالترتيب المذكور أعلاه ، مع العثور على القيمة الأخيرة لها الأسبقية على القيم التي تم قراءتها مسبقًا. عند أخذ قيم متعددة ، سيتم استخدام جميع قيم المفتاح من جميع الملفات.

سيتم كتابة جميع خيارات الكتابة بشكل افتراضي في ملف التكوين الخاص بالمستودع. لاحظ أن هذا يؤثر أيضًا على خيارات مثل --replace-all و --unset. git config لن يؤدي إلا إلى تغيير ملف واحد في كل مرة.

يمكنك تجاوز هذه القواعد إما عن طريق خيارات سطر الأوامر أو عن طريق متغيرات البيئة. --global وخيارات --system ستقصر الملف المستخدم على الملف الشامل أو على مستوى النظام على التوالي. متغير البيئة GIT_CONFIG له تأثير مماثل ، لكن يمكنك تحديد أي اسم ملف تريده.

90
user456814

لم تعد بحاجة إلى تخمين أي إعدادات تم ضبطها على أين ، مع git 2.8! (مارس 2016)

راجع الالتزام 70 يتعطل ، الالتزام 473166b ، الالتزام 7454ee3 ، الالتزام 7454ee3 (19 فبراير 2016) ، الالتزام 473166b و الالتزام 7454ee3 (19 فبراير 2016) ، الالتزام 7454ee3 (19 فبراير 2016) ، و الالتزام a0578e0 (/ 17 فبراير 2016) بواسطة لارس شنايدر ( larsxschneider) .
(تم دمجها بواسطة Junio ​​C Hamano - gitster - in الالتزام dd0f567 ، 26 فبراير 2016)

config: أضف الخيار "--show-Origin" لطباعة أصل قيمة التكوين

إذا تم الاستعلام عن قيم التهيئة باستخدام "git config" (على سبيل المثال عبر --get أو --get-all أو --get-regexp أو علامة --list) فمن الصعب أحيانًا العثور على ملف التكوين حيث تم تعريف القيم.

علم "git config" خيار "--show-Origin" لطباعة ملف التكوين المصدر لكل قيمة مطبوعة.

git config man page سوف تشير الآن إلى:

--show-Origin:

قم بزيادة مخرجات جميع خيارات التكوين المستعلم عنها بنوع الأصل (ملف ، الإدخال القياسي ، النقطة ، سطر الأوامر) والأصل الفعلي (مسار ملف التكوين ، المرجع ، أو رقم النقطة إن أمكن).

فمثلا:

git config --list --show-Origin

سيعود:

    file:$HOME/.gitconfig   user.global=true
    file:$HOME/.gitconfig   user.override=global
    file:$HOME/.gitconfig   include.path=$INCLUDE_DIR/absolute.include
    file:$INCLUDE_DIR/absolute.include  user.absolute=include
    file:.git/config    user.local=true
    file:.git/config    user.override=local
    file:.git/config    include.path=../include/relative.include
    file:.git/../include/relative.include   user.relative=include
    command line:   user.cmdline=true

لإعداد واحد ، كـ علق by wisbucky :

git config --show-Origin --get-all core.autocrlf

    file:"D:\\prgs\\git\\latest\\mingw64/etc/gitconfig"     true
    file:C:/Users/vonc/.gitconfig   false
53
VonC

بعد أن قمت مسبقاً بتثبيت Git for Windows ثم إلغاء تثبيته ، وجدت أن هناك ملف تكوين مثبت على C:\Users\All Users\Git\config وهو ملف تهيئة على مستوى النظام والذي سوف يستمر وسيؤثر على أي حزم git mingw32 المستقبلية (في حالتي ، كنت أقوم بتشغيل حزمة ging mingw32 المحمولة التي تقدمها شركتي). عندما ركضت

git config --system --edit

سيُظهر لي ملف تهيئة النظام الموجود في mingw32/etc/gitconfig ، لكنه سيظل يحمل القيم من الموقع الأول أيضًا. ظهر هذا كتحذير من أن قيم التكوين قد اصطدمت عند محاولة استخدام gf lfs

WARNING: These git config values clash:
  git config "http.sslcainfo" = "C:/Users/foo/AppData/Local/Programs/Git/mingw64/ssl/certs/ca-bundle.crt"
  git config "http.sslcainfo" = "/ssl/certs/ca-bundle.crt"

(ملاحظة: قد يكون هذا أيضًا موقف تكون فيه تحذيرات lfs حازمة جدًا # 861 )

9
jinxcat2008

يظهر Git config -l جميع القيم الموروثة من: النظام ، العالمي والمحلي.

بحيث يكون لديك ملف تهيئة آخر يتم تحميله في مكان ما مع ملف تعريف المستخدم .gitconfig

3
CBIII

يمكنك استخدام --show-Origin لمعرفة أين تأتي التكوينات.

أولوية ملفات التكوين في Git for Windows:

...

$PROGRAMDATA/Git/config ::
(في نظام التشغيل Windows فقط) ، تمت مشاركة ملف التكوين على مستوى النظام مع تطبيقات Git الأخرى. عادةً $PROGRAMDATA يشير إلى C:\ProgramData.

$(prefix)/etc/gitconfig ::
ملف التكوين على مستوى النظام. (في نظام Windows فقط) يحتوي هذا الملف فقط على الإعدادات الخاصة بهذا التثبيت لـ Git for Windows والتي يجب عدم مشاركتها مع تطبيقات Git الأخرى مثل JGit ، libgit2. --system سيختار هذا الملف.

$XDG_CONFIG_HOME/git/config ::
ملف التكوين الثاني للمستخدم. إذا لم يتم تعيين $XDG_CONFIG_HOME أو فارغ ، فسيتم استخدام $HOME/.config/git/config. سيتم استبدال أي متغير ذو قيمة مفردة تم تعيينه في هذا الملف بأي شيء موجود في ~/.gitconfig. من المستحسن عدم إنشاء هذا الملف إذا كنت تستخدم أحيانًا إصدارات أقدم من Git ، حيث تمت إضافة دعم لهذا الملف مؤخرًا إلى حد ما.

~/.gitconfig ::
ملف التكوين الخاص بالمستخدم. وتسمى أيضا ملف التكوين "العالمي".

$GIT_DIR/config ::
مستودع التكوين ملف التكوين.

...

تتم قراءة الملفات بالترتيب المذكور أعلاه ، مع العثور على القيمة الأخيرة لها الأسبقية على القيم التي تم قراءتها مسبقًا.

...

المصدر: https://github.com/git-for-windows/git/blob/[email protected]٪7B2018-01-07٪7D/Documentation/git-config.txt#L231

$PROGRAMDATA هو متغير بيئة. يمكنك الحصول على قيمة تلك المتغيرات مثل هذا:

في Git Bash تحتاج إلى استخدام echo "$ProgramData". في CMD ، تحتاج إلى استخدام echo %PROGRAMDATA%. لاحظ أن Git Bash يدعي أن متغيرات البيئة حساسة لحالة الأحرف.

ما هو $(prefix)؟

البادئة هي دليل المستوى الأعلى الذي يتم فيه تثبيت الأشياء. في Git for Windows ، يكون إما <some-path>/mingw64 أو <some-path>/mingw32.

1
Ini

في نظام التشغيل Windows 7 (ربما يكون مشابهًا أو مشابهًا لنظام التشغيل Windows 10) لبرنامج Visual Studio وسطر أوامر git ، يكون التكوين العام قيد التشغيل

%USERPROFILE%\.gitconfig

(النقطة أمام الملف)

ولكن لم يتم تكريم هذا من قبل SourceTree على الأقل في وضع Git Embedded ، والتكوين في

%USERPROFILE%\AppData\Local\Atlassian\SourceTree\git_local\mingw32\etc\gitconfig

(لا توجد نقطة أمام الملف)

[كنت بحاجة إلى تحديث كلا الملفين لتعديل إعدادات git العالمية لأمر git و SourceTree]

جزء ممتع آخر. كان Git hooks config يعمل من موقع AppData\Local\... ، ولكن بعد إجراء المزيد من الأبحاث عبر procmon ، لاحظت بطريقة ما أن SourceTree يقوم أيضًا بتحميل عمومي من محرك الشركة المعين لمستخدمي. هذا غير منطقي تمامًا نظرًا لأن عددًا قليلاً جدًا من التطبيقات يبحث عن هذا الموقع ، بطريقة ما ST تفعل ذلك إذا لم تتمكن من العمل حسب إعدادات الموقع في ST ، وقم بتشغيل procmon.exe وإنشاء قاعدة لتسجيل المسار فقط الذي يحتوي على gitconfig ، ويمكنك العثور على حيث هو أسيوط العالمي الخاص بك حقا في حالة دليل المستخدم شبكة المعينة. وهذا قد لا يكون خطأ ST ، كما أراه الآن وأنا أكتب هذا أن git.exe يتم تحميل ذلك ، لكن هذا يحدث فقط لـ git.exe الذي يتم تنفيذه بواسطة ST ، في حين يستخدم git سطر الأوامر المباشر %USERPROFILE%\.gitconfig

 enter image description here 

أخيرًا ، أخذت جميع النتائج من procmon ، وقمت بإدخال SQL وأجري استعلامًا للحصول على نتائج مميزة (لا يوجد ترتيب تنفيذ محدد يتم الفرز حسب المسار):

 enter image description here 

لا أعرف مدى ارتباط هذه التكوينات ببعضها البعض ، لكنني أعرف أن البعض يتجاهل بعض الإعدادات الأخرى التي تعمل من مكان ما. ويتم استدعاء القائمة أعلاه بواسطة SourceTree ، مرة أخرى يبدو أن سطر الأوامر المباشر مع git يعمل بشكل جيد مع %USERPROFILE%\.gitconfig وهذا ليس في هذه القائمة ولكنه سيبدو هكذا (في Win7) c:\Users\pawel.cioch\.gitconfig

0
Pawel Cioch