الخروج من git متناثر من الملفات في الدليل الأصل

StackOverflow https://stackoverflow.com/questions/19838999

  •  28-07-2022
  •  | 
  •  

سؤال

بالاقتراض من بعض البرامج التعليمية ، أتمكن من القيام بموجب قشعري على مجلد معين في ريبو غيت.

mkdir git-completion && cd git-completion
git init
git remote add –f origin https://github.com/git/git.git
git config core.sparsecheckout true
echo contrib/completion/ >> .git/info/sparse-checkout
git pull origin master

على سبيل المثال ، دعنا نقول أنني بعد git-completion.bash, git-completion.tcsh, ، وما إلى ذلك البرامج النصية الموجودة في contrib/completion مجلد هذا الريبو.

إن الفحص المتفرق أعلاه يعيد لي المجلد المطلوب ، لكن يبدو أن لديه نشوة ملف متداخلة:

git-completion/contrib/completion/git-completion.bash

هل من الممكن سحب الملفات بدلاً من ذلك إلى الدليل الأصل مثل ذلك؟

git-completion/git-completion.bash
هل كانت مفيدة؟

المحلول

يمكنك القيام بذلك مع git show:

git show <revision>:path/to/file.txt > different/path/to/otherfile.txt

في حالتك المحددة:

git show HEAD:git-completion/contrib/completion/git-completion.bash > git-completion/git-completion.bash

كرر لكل ملف تريد الخروج. على الرغم من أنه ، في الحقيقة ، سبب الدلائل الفرعية ، كما أعتقد ، هو أنه عندما يتم تجميعها في أ git الإصدار ، تم وضعهم في contrib/completion الدليل الفرعي ، لذلك قد يكون من الأفضل التعود على تخطيط المستودع ...

نصائح أخرى

اعتمادًا على ما تحاول إنجازه لديك خياران. إذا كنت تريد أن تكون قادرًا على تتبع التغييرات على الملفات ، فسأرتكب Symlinks. إذا كنت لا تهتم بالتغييرات المحلية ، فسأستخدم git archive.

ارتكاب symlinks

يمكنك ارتكاب Symlinks للملفات التي تهتم بها ، واستخدام الخروج الاحتياطي للحصول على تلك كذلك.

ln -s contrib/completion/git-completion.bash git-completion.bash
git add git-completion.bash

سيسمح لك ذلك بتحرير الملفات والالتزام بتغييرات عليها.

أرشيف GIT

سيؤدي هذا ببساطة إلى استخراج المحتوى الذي تبحث عنه. لن يتم تتبع التغييرات في المستودع.

# generic
git archive <revision>:<path> | tar -xf -

#specific to your example
git clone --bare https://github.com/git/git.git ~/git-completion-bare
mkdir git-completion && cd git-completion
git archive --remote ~/git-completion-bare master:contrib/completion/ | tar -xf -

تحرير: يبدو الأمر github لا يدعم git archive --remote. لا يزال مدرجًا أدناه في حالة قيام شخص ما باستخدام خدمة استضافة مختلفة تسمح بذلك.

أرشيف GIT مع -Remote

باستخدام أرشيف GIT ، يمكنك حتى تنزيل التغييرات مباشرة من مستودع عن بُعد دون استنساخ المستودع أولاً. الجانب السلبي هو أنه لا يمكنك تتبع التغييرات المحلية مع GIT.

# General form
git archive --remote <url> <revision>:<path> | tar -xf -
# your example 
git archive --remote https://github.com/git/git.git master:contrib/completion/ | tar -xf -

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top