當我想要根據SVN修訂版本id獲取提交的本地散列時,我通常運行git svn find-rev
。但是,一個很大的不便之處在於,該命令只會查找當前分支中的提交或修訂後的命令中明確指定的分支。讓`git svn find-rev`搜索整個版本庫
有時,我只知道修訂ID,我想在不知道分支名稱的情況下找到本地散列。有沒有辦法用git svn find-rev
來做到這一點?這是有道理的,知道SVN修訂是獨一無二的。
編輯:
事實證明,沒有做到這一點沒有什麼好辦法。 我接受了答案,該答案提供了一個解決方案,但搜索具有大量分支的存儲庫(如我的)需要很長時間。最後我寫我自己的殼功能,結合使用常規svn
與git svn
,其工作方式要快得多:
gitrev()
{
if [ -z "$1" ]; then
echo "${FUNCNAME[0]} <revision> [git_args]"
return 1
fi
local rev b
rev="$1"
shift
b="$(svn log -v -c "$rev" "$SVN_BRANCHES_URL" | grep -m1 -Po '/branches/\K[^/]+')" &&
git svn find-rev "r${rev#r}" "origin/$b" "[email protected]"
}
如果你使用它,你可能需要更換grep -P
一部分,如果你不是在GNU/Linux操作系統。可以使用或不使用「r」前綴來指定修訂版本。
似乎喜歡它,但在我的情況下,我也必須搜索遠程分支機構,這需要很多時間。 – Thunderbeef
是的,可能需要相當長的一段時間,特別是如果你有很多參考資料,並且你的電子郵件。 G。給所有的參考文獻,修訂版本在多個分支,或者在一些分支和一些標籤中,你會多次得到結果。但這是我所知道的唯一的方式。否則,您必須編寫一個基本相同的循環,並在找到結果後立即停止。 – Vampire
好吧,我發佈了另一個可以在整個存儲庫中可靠工作的單線程,並在找到某個東西后立即停止。您可以通過向e添加排序來修改它。 G。先查看本地分支,然後查看遠程分支,然後查看標籤或類似的東西。 – Vampire