我有一些歷史重寫要做,爲此我想保留原始樹的完整性。然而,重寫的樹應該複製之前使用的標籤。有沒有比例如手動選項更少在分支名稱前加上標籤名稱?git:有沒有像每分支標籤?
7
A
回答
14
不,沒有什麼像git中的每分支標記。所有分支和標籤都只是Git中的參考類型; ref只是一個指向修訂歷史記錄中特定修訂版的名稱。舉例來說,如果你有devel
和master
分支機構,並v1.0
和v2.0
標籤,引用會是這個樣子:
refs/heads/devel -> * /\ * * <- refs/heads/master | | * * \/ * <- refs/tags/v2.0 | * | * <- refs/tags/v1.0 | *
正如你所看到的,沒有什麼搭售這些標籤的任何分支機構;實際上,所有這些標籤都包含在master
和devel
分支中。通過查看您的.git
回購庫,您可以看到實際上沒有更多的標籤結構。它只是一個包含引用.git/refs
內提交的SHA-1或.git/packed-refs
中的一行的文件(標籤經常位於packed-refs
中,因爲它們不經常更改,而分支通常是git/refs
內的單獨文件)。
所以,如果你想重寫歷史,並保留舊的標籤,你將不得不重寫你的標籤名稱。正如sehe指出的,這是通過使用git filter-branch --tag-name-filter
完成的。
1
您可以命名空間的標籤變成你想要的標籤(種)的分支命名的目錄屬於,而且不必進行手動:
git-thisBranch() { git symbolic-ref --short HEAD; }
git-localTag() {
local name="$1"; shift;
git tag $(git-thisBranch)/"$name" "[email protected]";
}
相關問題
- 1. git分支(沒有分支)
- 2. 有沒有辦法使用git-svn鏡像Git repo到SVN並讓Git標籤/分支變成SVN標籤/分支?
- 3. Git標籤與分支
- 4. 將git分支轉換爲git標籤
- 5. git:開關分支沒有分離頭
- 6. 開關git分支沒有文件簽出
- 7. Git:新分支沒有被推動
- 8. 沒有歷史的git分支
- 9. 沒有提交的Git結帳分支
- 10. Git fetch沒有下載遠程分支
- 11. 沒有結帳分支的Git diff
- 12. 標籤vs git中的分支
- 13. 從clearcase標籤合併到git分支
- 14. Git標籤和分支版本是?
- 15. 分支沒有分支
- 16. git rebase分支與所有子分支
- 17. git - 「調試」分支,合併「修復」分支沒有「調試」
- 18. Git:在檢出新分支之前沒有提交分支
- 19. 是否有可能在git中的多個分支上有版本標籤?
- 20. 沒有開發分支的特性分支模型的Git分支策略
- 21. 沒有標籤
- 22. github回購克隆,但沒有標籤/分支重新創建?
- 23. 爲什麼CVS中的分支標籤沒有向前移動?
- 24. 遠程git分支與`git branch -r`沒有顯示?
- 25. 爲什麼在git獲取後沒有看到git分支?
- 26. 標籤git版本從構建 - 標籤沒有在git中找到
- 27. 有沒有辦法查看你的git分支的映射?
- 28. 使用`git checkout -b`有和沒有分支的起點
- 29. 有沒有辦法輸出以前的git分支名稱?
- 30. 有沒有更好的方法來恢復git-svn分支?
......然後將其用'git filter-branch ..... --tag-name-filter cat'完成# – sehe 2011-04-18 14:41:45
@sehe:謝謝,這讓我想起改進[這個腳本](http://stackoverflow.com/questions/4278264/git -split-歷史的幾家,文件,到-A-獨立的分支/ 4283970#4283970) – 2011-04-18 14:55:45