我想寫一個結帳和保持更新的makefile(通用或GNU)來操作多個svn工作副本,如repo_1
... repo_n
,像這樣已使svn結帳和更新各種工作副本
對於所有回購i
做
- 如果
./repo_i
尚不存在,svn checkout repo_i
[它應該實際上是安全的假設,沒有或全部存在,但我傾向於overengineer] - 否則
cd ./repo_i && svn update
。
我非常確定這應該是優雅的可以做的,這似乎是一個非常簡單的事情要,所以別人一定有這個想法在我面前;但是,我仍然無法找到任何有用的東西,並在自己構建時遇到困難。
結賬部分是確定的,在那裏我可以做
DIRS = repo1 repo2 [...] repoN
all: $(DIRS)
$(DIRS):
svn checkout http://some.svn.path/[email protected]/trunk [email protected]
但更新位是棘手。我希望在全新結帳後防止更新(確保它不會造成傷害,但是不要只是討厭冗餘?),然後我不確定如何在回購站中「循環」而不必寫出更新規則爲每個工作副本,並使其.PHONY
,然後再次可能會干擾結帳規則。我最初的想法看起來像
DIRS = repo1 repo2 [...] repoN
update: $(DIRS)
cd $(make-magic) && svn update
但這不會飛,因爲規則更新repo_i
將永遠不會被觸發,如果./repo_i
已經存在,並檢查是否上行較新,我需要在./repo_i
運行svn update
。
有沒有其他人試過這個?額外的榮譽,如果你的想法和make -j
和平共處,只是因爲! (在N = 4的情況下也很乏味)。
PS:這是完全獨立於實際VCS的,但它需要使用svn工作(所以任何的那些神奇的git solve --all-problems
不會幫助這裏:-)
感謝@MadScientist,就像你說過的那樣,它像'魅力一樣,也帶有'-j'。也會+1你,因爲我認爲你的答案是清晰和全面的,但缺乏代表:( – dlw