سؤال بوابة - قائمة جميع الملفات حاليا تحت سيطرة المصدر؟


هل هناك طريقة لسرد جميع الملفات الموجودة حاليا تحت سيطرة المصدر في بوابة؟ (ليس فقط تلك التي تم تعديلها).


93
2018-05-28 13:12


الأصل




الأجوبة:


إذا كنت تريد إدراج جميع الملفات لفرع معين ، على سبيل المثال ، master:

git ls-tree ماجستير - اسم - فقط

ال -r خيار السماح لها بتكرار في الدلائل الفرعية وطباعة كل ملف حاليا تحت التحكم في الإصدار. يمكنك أيضا تحديد HEAD بدلا من master للحصول على قائمة لأي فرع آخر قد تكون فيه.

إذا كنت ترغب في الحصول على قائمة بكل الملفات الموجودة ، انظر هنا:

سجل جيت - شكل = تنسيق: - اسم المكان قطع -f2- | نوع -و

99
2018-05-28 13:19



بفضل slhck ، بالضبط ما كنت بعد - ومفيدة لمعرفة الثاني أيضا. سوف يتم وضع علامة صحيحة في 5 دقائق ونصف عندما يسمح لي. :-) - Anonymous
شكرا على الاجابة. كنت أبحث عن هذا. لاحظ أن git ls-tree -r master --name-only سوف تفعل نفس الخيار الأول ، دون الحاجة إلى cut. آه ، ويمكنك تحديد HEAD بدلا من master إذا كنت ترغب فقط في هذه القائمة لأي فرع موجود حالياً. - maurits
تشغيل "git ls-files" سيوفر لك بعض الأحرف :) - Zain R


ال git ls-files القيادة سوف تفعل ما تحتاجه.

مصدر: http://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html


50
2017-11-27 09:36



git ls-files بدلا من git ls-tree -r master --name-only هو بالتأكيد أكثر بساطة. - karatedog
عذرًا ، لكن تعديلي لم يكن صالحًا. في بوابة الحالي لا يوجد git-ls-files الثنائية. هنالك ال git ثنائي مع ls-files أمر. الارتباط إلى الوثائق صحيح في المحتوى ، ولكن تقنيًا لملف ثنائي قديم. - JonnyJD
JonnyJD ، ربما تم وضع علامة غير صالحة لأن تعديلك يجب أن يكون تعليقًا. - Ascherer
JonnyJD يتم تسمية جميع صفحات الرجل Git باسم git-commit، git-init، git-ls-filesوما إلى ذلك على الرغم من أن البرامج هي بالفعل أوامر فرعية. لم يكن هناك أبدا git-ls-files ثنائي ، على الأرجح. الاستنتاج هو أنه متوافق مع آلية subcommand الخارجية ، والتي تسمح لك بتسجيل أ git foo الأمر بكتابة git-foo الثنائية. - Radon Rosborough


git ls-files سيقوم فقط بطباعة الملفات في دليل العمل الحالي.

على سبيل المثال ، إذا كان لديك git repo for dotfiles (core.worktree = /) ، سيكون لديك ملفات خارج جذر git ولن يعمل هذا الأمر البسيط بعد الآن.

باختصار ، سيعمل هذا:

git --git-dir "`git rev-parse --git-dir`" \
    -C "`git config core.worktree || pwd`" \
    ls-files

مثال:

mkdir ~/dotfiles
cd ~/dotfiles
git config core.worktree /

# Ignore all files by default, else Git will find all files under "/"
echo "*" > .git/info/exclude

# Add files at the git repo's root and somewhere in the work tree
touch README
git add -f README
git add -f /etc/ssh/sshd_config

# `git status` would now print:
# new file:   ../../../etc/ssh/sshd_config
# new file:   README
git status

git commit -m "Initial commit"

# At this point, `git ls-files` prints only:
# README
git ls-files

# But you can print all files inside the work tree. This will print:
# etc/ssh/sshd_config
# home/yourusername/dotfiles/README
git --git-dir "`git rev-parse --git-dir`" -C "`git config core.worktree || pwd`" ls-files

إذا كنت تريد مسارات محددة نسبيا إلى دليل (shell) الحالي ، يقوم هذا العمل:

alias gls='git ls-tree -r master --name-only HEAD "`git config core.worktree`"'

وفي المثال أعلاه ، ستتم الطباعة

README
../../../etc/ssh/sshd_config

3
2017-10-16 06:23





يمكنك أيضا استخدام gitk عارض المستودع التفاعلي.


0
2018-03-12 19:16



هذا يذكر أداة ، ولكن لا يجيب حقا "كيف". هل يمكنك توسيع هذا إلى حل قابل للتنفيذ؟ مجرد الإشارة إلى شخص ما في اتجاه بحثي لتطوير الحل الخاص به هو أكثر ملاءمة كتعليق. شكر. من المراجعة - fixer1234