আমি আমার সমস্ত প্রতিবেদনে আমার নাম, নাম এবং ইমেল পরিবর্তন করতে চাই, এটা কি সম্ভব?
আমি আমার সমস্ত প্রতিবেদনে আমার নাম, নাম এবং ইমেল পরিবর্তন করতে চাই, এটা কি সম্ভব?
উত্তর:
ব্যবহার git-filter-branch
।
git filter-branch --commit-filter 'if [ "$GIT_AUTHOR_NAME" = "Josh Lee" ];
then export GIT_AUTHOR_NAME="Hobo Bob"; export GIT_AUTHOR_EMAIL=hobo@example.com;
fi; git commit-tree "$@"'
এটি কেবল লেখককে প্রভাবিত করে, প্রতিশ্রুতিবদ্ধ নয় (যা বেশিরভাগ কমিটের জন্য লেখকের মতো হবে)। আপনি যদি সেগুলিও আবার লিখতে চান তবে GIT_COMMITTER_NAME
এবং GIT_COMMITTER_EMAIL
ভেরিয়েবলগুলি সেট করুন ।
মান সাবধানবাণী ইতিহাস প্রযোজ্য rewriting সম্পর্কে; কেবল ইতিহাসে এটি করুন যা এখনও ভাগ করা হয়নি।
ম্যানুয়ালটিতে এখন এর সমাধানগুলি অন্তর্ভুক্ত রয়েছে --env-filter
যার উদাহরণগুলিতে: https://git-scm.com/docs/git-filter- ব্রাঞ্চ#_ উদাহরণ :
git filter-branch --env-filter '
if test "$GIT_AUTHOR_EMAIL" = "root@localhost"
then
GIT_AUTHOR_EMAIL=john@example.com
fi
if test "$GIT_COMMITTER_EMAIL" = "root@localhost"
then
GIT_COMMITTER_EMAIL=john@example.com
fi
' -- --all
msysgit
আপনার এখনও অ্যাক্সেস থাকতে পারে bash
। অন্যথায়, আমার কোনও ক্লু নেই।
সমস্ত নির্বাচিত কমিটিতে লেখক এবং প্রতিশ্রুতিবদ্ধ উভয়কেই আবার লিখতে:
git filter-branch --commit-filter \
'if [ "$GIT_AUTHOR_NAME" = "OldAuthor Name" ]; then \
export GIT_AUTHOR_NAME="Author Name";\
export GIT_AUTHOR_EMAIL=authorEmail@example.com;\
export GIT_COMMITTER_NAME="Commmiter Name";\
export GIT_COMMITTER_EMAIL=commiterEmail@example.com;\
fi;\
git commit-tree "$@"'
git push --all origin --force
অন্য কোনও লেখক না থাকলে আপনি এটি করতে পারেন:
git filter-branch --commit-filter 'export GIT_AUTHOR_NAME="authorname"; \
export GIT_AUTHOR_EMAIL=mail@example.com; git commit-tree "$@"'
নীচের স্ক্রিপ্টটি যেমন সংরক্ষণ করুন ~/.bin/git-replace-author
এবং এটি ব্যবহার করে চালান, উদাহরণস্বরূপ:
git replace-author "John Ssmith" "John Smith" "johnsmith@example.com"
কোনও যুক্তি ছাড়াই এটি গিট কনফিগারেশন অনুসারে আপনার বর্তমান ইমেল ঠিকানাটি ব্যবহার করার জন্য আপনার নামের সাথে সমস্ত প্রতিশ্রুতি আপডেট করে।
DEFAULT_NAME="$(git config user.name)"
DEFAULT_EMAIL="$(git config user.email)"
export OLD_NAME="${1:-$DEFAULT_NAME}"
export NEW_NAME="${2:-$DEFAULT_NAME}"
export NEW_EMAIL="${3:-$DEFAULT_EMAIL}"
echo "Old:" $OLD_NAME "<*>"
echo "New:" "$NEW_NAME <$NEW_EMAIL>"
echo "To undo, use: git reset $(git rev-parse HEAD)"
git filter-branch --env-filter \
'if [ "$GIT_AUTHOR_NAME" = "${OLD_NAME}" ]; then
export GIT_AUTHOR_NAME="${NEW_NAME}"
export GIT_AUTHOR_EMAIL="${NEW_EMAIL}"
export GIT_COMMITTER_NAME="${NEW_NAME}"
export GIT_COMMITTER_EMAIL="${NEW_EMAIL}"
fi'
কাঁচা (ডাউনলোড করতে)
~/.bin/
ভিতরে ব্যবহারকারীদের করা প্রয়োজন $PATH
, এবং ফাইল চাহিদা এক্সিকিউটেবল হতে হবে যাতে সঞ্চালন করুন: chmod +x ~/.bin/git-replace-author
।
আপনি যদি নিজের প্রতিশ্রুতি বিশ্বে না চালিত হন তবেই। অন্যান্য জ্ঞানী প্রত্যেকেরই রেপোতে আপনার পুরাতন নাম রয়েছে যা আপনি সবার নাম পরিবর্তন করতে পারবেন না।
গিট 2.24 (কিউ 4 2019) সহ, git filter-branch
এবং (এবং বিএফজি) হ্রাস করা হয়েছে ।
সমতুল্য হ'ল, ব্যবহার newren/git-filter-repo
এবং এর উদাহরণ বিভাগ :
cd repo
git filter-repo --mailmap my-mailmap
সাথে my-mailmap
:
Correct Name <correct@email.com> <old@email.com>
এটি কারও দ্বারা করা কোনও প্রতিশ্রুতি লেখকের নাম এবং ইমেল প্রতিস্থাপন করবে <old@email.com>
এর সঠিক বাক্য গঠনের জন্য git shortlog
ম্যাপিং লেখকের বিভাগটি দেখুন