2016-06-20 43 views
1

我最近創建了一個release分支,我在其中合併了所有標記的提交。我們的目標是重命名masterdevelop然後用master作爲release分支(如Git流)避免Git日誌中的聖誕樹--all

現在,當我git log --all顯示我的完整的日誌,我得到一個美妙的聖誕樹不是真的很有幫助。

* | e503add 10 days ago 
| * a2948b1 11 days ago 
| |\ 
| * \ b22e247 3 weeks ago 
| |\ \ 
| * \ \ 01f1ebc 4 weeks ago 
| |\ \ \ 
| * \ \ \ 01336c7 4 weeks ago 
| |\ \ \ \ 
| * \ \ \ \ 59f83a8 5 weeks ago 
| |\ \ \ \ \ 
| * \ \ \ \ \ 25a2444 6 weeks ago 
| |\ \ \ \ \ \ 
| * \ \ \ \ \ \ 4271ae9 6 weeks ago 
| |\ \ \ \ \ \ \ 
| * \ \ \ \ \ \ \ ef62400 8 weeks ago 
| |\ \ \ \ \ \ \ \ 
| * \ \ \ \ \ \ \ \ f56aa1e 2 months ago 
| |\ \ \ \ \ \ \ \ \ 
| * \ \ \ \ \ \ \ \ \ 7fdab4a 4 months ago 
| |\ \ \ \ \ \ \ \ \ \ 
| * \ \ \ \ \ \ \ \ \ \ b25d101 4 months ago 
| |\ \ \ \ \ \ \ \ \ \ \ 
| * \ \ \ \ \ \ \ \ \ \ \ 7477021 6 months ago 
| |\ \ \ \ \ \ \ \ \ \ \ \ 
| * \ \ \ \ \ \ \ \ \ \ \ \ 8b166b4 8 months ago 
| |\ \ \ \ \ \ \ \ \ \ \ \ \ 
| * \ \ \ \ \ \ \ \ \ \ \ \ \ 93be56f 9 months ago 
| |\ \ \ \ \ \ \ \ \ \ \ \ \ \ 
| * \ \ \ \ \ \ \ \ \ \ \ \ \ \ 7b28785 1 year, 4 months ago 
| |\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 
| * \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 4aaa409 1 year, 4 months ago 
| |\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 
| * \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 4cab662 1 year, 5 months ago 
| |\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 
| * \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 996564a 1 year, 6 months ago 

一種解決方案是使用git log --date-order而不是默認的--topo-order的。但是我無法真正解釋爲什麼我會得到這樣的日誌。

#!/bin/bash 
set -e 
git checkout -b release $first-tag 
for tag in "${tags[@]}" 
do 
    date=$(git show -s --format="%ad" $(git log -n1 --format=%h $tag)) 
    export GIT_AUTHOR_DATE=$date; 
    export GIT_COMMITTER_DATE=$date; 
    git merge -Xtheirs -m $tag $tag 
    git tag --delete $tag 
    git tag -a -m $tag $tag 
done   

我怎樣才能避免這種--topo-order聖誕樹:

我用這個shell腳本創建了發佈分支?

回答

1

--topo-order多頭行爲不好[*]。如果你想要漂亮的圖片,請嘗試使用它與特定的分支,而不是--allrelease在你的情況)。

[*]一個提交必須在它被合併到任何提交之後,所以如果在當前版本之後放置了一些先前的發佈提交,它會強制所有的分支導致該樹。

示例腳本重現該問題,因爲我看到它:

#!/bin/sh 

set -e 

git init 
git commit --allow-empty -m init 
git tag init 
for i in $(seq 1 10) 
do 
sleep 1 
git commit --allow-empty -m b$i 
git branch b$i 
git reset --hard init 
done 
for i in $(seq 1 10) 
do 
sleep 1 
git merge --no-edit b$i 
done 
git branch merge1 
git reset --hard init 
for i in $(seq 1 10) 
do 
sleep 1 
git merge --no-edit b$i 
done 
+0

您能給你'[*]'句話的一個簡單的例子?我想這是我正在尋找的答案,但我想先在測試存儲庫中重現它。 – nowox

+0

概述如下:從一些基本的修訂版'B'步驟應該是這樣的:1)提交一些東西,2)創建分支'b1',3)重置爲'B',重複1-3幾次創建分支b2,b3等。,4)重置爲'B',5)合併'b1','b2' ...,6)創建分支'merge1',重複4,5,7)創建分支'merge2'。 – max630

+0

「重置爲B」是什麼意思? 'git checkout master; git commit; git checkout -b b1; git reset head〜1; git的; git commit'。這將不會做任何事情 – nowox