簡體   English   中英

使用Maven-release-plugin時,為什么不只從本地存儲庫中檢測scm信息?

[英]When using maven-release-plugin, why not just detect scm info from local repo?

據我所知,要使用maven-release-plugin,必須將scm部分放入POM文件中。 例如:

<scm>
    <connection>scm:hg:ssh://hg@bitbucket.org/my_account/my_project</connection>
    <developerConnection>scm:hg:ssh://hg@bitbucket.org/my_account/my_project</developerConnection>
    <url>ssh://hg@bitbucket.org/my_account/my_project</url>
    <tag>HEAD</tag>
</scm>

我了解此數據用於確定要標記什么以及將更改推向何處。 但是,如果您已克隆/檢出代碼,此信息是否不可用? 我在概念上有些掙扎,我需要告訴Maven什么時候需要標記什么代碼,至少從理論上講,只需詢問Git / HG / SVN / CVS它正在處理什么代碼。 我懷疑我在細節中遺漏了一些東西,但是我不確定。 是否可以更改maven-release-plugin代碼以將其刪除,或者至少將自動檢測設置為默認值? 如果不能,有人可以提供一些有關為什么這樣行不通的背景信息嗎?

一方面,GIT和Subversion可以具有用於讀寫和只讀訪問的不同SCM URI。

這就是不同的<connection><developerConnection> URI應該捕獲的。 第一個是保證讀取訪問的URI。 第二個是保證寫訪問的URI。

通常,從已檢出的存儲庫中無法推斷出規范的URI。

例如,我可能會通過svn:協議和服務器的IP地址在內部檢出Subversion存儲庫,但是外部貢獻者將需要使用https://和主機名。

甚至使用GIT存儲庫,在Github上,您都有用於不同訪問機制的不同URI,例如

  • https://github.com/stephenc/eaio-uuid.git (使用用戶名/密碼或OAuth進行讀寫)
  • git@github.com:stephenc/eaio-uuid.git (使用SSH私鑰標識進行讀寫)
  • git://github.com/stephenc/eaio-uuid.git (匿名只讀)

沒關系,您可能已經簽出了git://github.com/zznate/eaio-uuid.git或克隆了本地簽出,換句話說,您本地的git存儲庫可能會使“上游”為../eaio-uuid-from-nate而不是git@github.com:stephenc/eaio-uuid.git

我同意,對於某些SCM工具,您可以自動檢測...例如,如果您知道從AccuRev中檢出了源,則應該假設其詳細信息是可以的...直到點擊Subversion或GIT或CVS或其他代碼模塊檢出到AccuRev工作區(真實情況),以便可以更新引入的標簽。

簡而言之,必須確定檢測代碼,以確保您沒有同時使用兩個SCM系統,以確保哪個是主SCM ...而另一個SCM甚至可能沒有將標記文件留在磁盤上嗅出(例如,AccuRev不會,因此我選擇了它)

唯一安全的方法是要求pom至少定義SCM系統,並且對於無法可靠推斷URI的那些SCM系統(認為CVS,Subversion,GIT,HG,實際上其中的大多數)都要求URI進行定義被指定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM