كيف تغير أسم وبريد مساهم في تاريخ Git

السلام عليكم ورحمة الله وبركاتة
في حاله قد غيرت اسمك في استضافه Git, او انتقلت الى استضافه اخرى, او حتى لو تريد اخفاء بريدك من تاريخ Git. في هذا الموضوع سوف أشرح كيفيه التعديل على تاريخ Git من اجل تعديل اسماء وبريد المساهمين.


شعار Git هو من تصميم Jason Long

اذا بحثت في الانترنت, ستجد الاغلبيه يستخدمون git-filter-branch لكن غير منصوح باستخدامها من مشروع Git نفسهم لذلك سنستخدم git-filter-repo

تثبيت git-filter-repo

pip3 install git-filter-repo

قبل عمل اي تغيير تاكد من وجود نسخه احتياطيه من المستودع, سواء اشتقاق عام او نسخة محلية

تغيير البريد والاسم

اذا كنت تريد اخفاء بريدك لكن تريد ان تظهر التعديلات باسمك, معظم مواقع استضافة Git تقدم بريد noreply
في Github هو ظاهر في صفحه البريد سيكون العنوان xxx+username@users.noreply.github.com
اما Gitlab سيكون موجود في Profile تحت اسم Commit email xxx+username@users.noreply.gitlab.com
استضافات gitea عادة تستخدم username@noreply.giteadoman.tld ويكون اسم المستخدم بدون اي اضافة

git-filter-repo --name-callback 'return name.replace(b"<old-username>", b"<new-username>")' --email-callback 'return email.replace(b"<old@email.com>", b"<new@email.com>")'  --replace-refs delete-no-add --force
  • <old-username> = أسم المستخدم القديم
  • <new-username> = أسم المستخدم الجديد
  • <old@email.com> = البريد القديم
  • <new@email.com> = البريد الجديد

تغيير الاسم فقط

git-filter-repo --name-callback 'return name.replace(b"<old-username>", b"<new-username>")'  --replace-refs delete-no-add --force
  • <old-username> = أسم المستخدم القديم
  • <new-username> = أسم المستخدم الجديد

تغيير البريد فقط

اذا كنت تريد اخفاء بريدك لكن تريد ان تظهر التعديلات باسمك, معظم مواقع استضافة Git تقدم بريد noreply
في Github هو ظاهر في صفحه البريد سيكون العنوان xxx+username@users.noreply.github.com
اما Gitlab سيكون موجود في Profile تحت اسم Commit email xxx+username@users.noreply.gitlab.com
استضافات gitea عادة تستخدم username@noreply.giteadoman.tld ويكون اسم المستخدم بدون اي اضافة

git-filter-repo  --email-callback 'return email.replace(b"<old@email.com>", b"<new@email.com>")'  --replace-refs delete-no-add --force
  • <old@email.com> = البريد القديم
  • <new@email.com> = البريد الجديد

اضافه رابط المستودع

بعد كل هذه التعديلات سيتم حذف ال remote
هذه الاوامر لاضافه ال remote مره اخرى

git remote add origin <repolink>
git remote set-url origin <repolink>
  • <repolink> = رابط المستودع

رفع التعديلات

git push -u origin <target-branch> --force
  • <targe-brach> = اسم الفرع, مثلا main او master

المصدر

إعجاب واحد (1)

يا حبذا لو تدمجه مع مشاركه اخرى ايضا عن git مع github شرح هنا:

إعجاب واحد (1)

لا اتوقع له علاقه بالموضوع هذا.
الموضوع السابق يشرح github

اما هذا يشرح ميزه مهمه داخل GIT.

كما تحب لكن:

هذا سيء فpip ليس امن التنصيب منه, موجود من حزم ديبيان الرسميه وارش : (او حتى من سناب)

https://archlinux.org/packages/community/any/git-filter-repo

ما الفرق بالامان ؟
بالعكس pip ينزل حزم كمستخدم بدل root

pip لا يقوم بتوقيع الحزم او المكتبات المرفوعه عليه cryptographic signatures, وهنالك من قام برفع ملفات خبيثه عليه اكتشفت بعد مده, اضافه مدير حزم طرف ثالث غير منصوح به امنيا (خاصه في مثل هذا المستوى) راجع مثلا: