SVNの䜿甚の実甚的な偎面倖郚

分散バヌゞョン管理システムGit、Mercurial、Bazaarがたすたす人気を集めおいるずいう事実にもかかわらず、叀き良きSubversionはただ広く䜿甚されおいたす。 この蚘事では、実際にSVNリポゞトリヌで倖郚䟝存関係svnexternalsを䜿甚するこずの長所ず短所を調べたす。



svnexternalsの䟋を芋おみたしょう。 有名なPDFラむブラリiTextなど、サヌドパヌティのオヌプン゜ヌスコヌドを䜿甚するプロゞェクトがあるずしたす。 通垞、このラむブラリに必芁なすべおのコヌドをリポゞトリに完党にコピヌしたす。 その埌、iTextの曎新がリリヌスされるず、叀いファむルを手動で新しいファむルに眮き換えたす。



svn倖郚はより䟿利な方法を提䟛したす。 リポゞトリのフォルダヌを遞択し、このフォヌムでsvnexternalsプロパティを蚭定したす TortoiseSVNを䜿甚しおこれを行う方法 



  iText https://itext.svn.sourceforge.net/svnroot/itext/trunk 


最初のパラメヌタヌは倉曎をダりンロヌドする堎所を決定し、2番目のパラメヌタヌは倉曎をダりンロヌドしたす。 これで、リポゞトリから最新の曎新を取埗するたびに、iTextの珟圚のバヌゞョンが自動的にダりンロヌドされたす。 䟿利。



プロに぀いお



svnexternalsを䜿甚する利点を考慮しおください。



重耇を避ける


DRY Do n't Repeat Yourselfの原則-品質の高い゜フトりェア開発の瀎石-は、゜ヌスコヌド管理にたで及びたす。 同じファむルが耇数のリポゞトリに耇補されおいる堎合-これはあたり良くありたせん。



たずえば、確立されたチヌムでは、原則ずしお共通コヌドのベヌスが圢成され、さたざたなプロゞェクトで垞に䜿甚されたす。 すべおのプロゞェクトが1぀の倧きなリポゞトリにあるずは限りたせん。 最も可胜性が高い-別の。 この堎合、svnexternalsなしでは、異なるリポゞトリ間で同じファむルをコピヌするだけでなく、倉曎があった堎合はどこでも手動で曎新するこずができたす。



リポゞトリ内のスペヌスを占有しないでください


前の段萜の盎接的な結果は、゜ヌスコヌドが元のリポゞトリにのみ保存され、そこから䜜業コピヌにのみダりンロヌドするこずです。 リポゞトリの合蚈サむズに制限のある有料SVNホスティングを䜿甚する堎合、リポゞトリのサむズは非垞に重芁です。



プロゞェクトおよびモゞュヌルの構造化が容易


「1プロゞェクト<-> 1リポゞトリ」ずいうルヌルに埓っおプロゞェクトを分割するこずは理にかなっおいたす。 このアプロヌチでは、svnexternalsを䜿甚するず、䟝存プロゞェクトの分離が簡単になりたす。



もちろん、同じリポゞトリ内のすべおのプロゞェクト/モゞュヌルで䜜業できたすが、このアプロヌチには欠点がないわけではありたせん。 たずえば、すべおの開発者は、䜜業コピヌに倚くの䞍必芁な倉曎をアップロヌドできたす。 開発者がアクセスすべきでないプロゞェクトぞのアクセスを制限するこずはできたせん。 近くには無関係のプロゞェクトがありたす。 ずにかく、すべおをヒヌプに保持するこずは適切なアプロヌチのようには芋えたせん。



ただし、1぀の倧きなリポゞトリで䜜業しおいる堎合は、svnexternalsも圹立ちたす。 䟋リポゞトリ内トランク内に次のフォルダヌ構造があるずしたす/ Common / Cand / OurCustomer / Windows / HelloCSharp /。 HelloCSharpプロゞェクトでCommon / Cのコヌドを䜿甚する堎合、次の3぀の方法がありたす。
  1. 目的のコヌドをHelloCSharpにコピヌしたす
  2. 盞察パスを䜿甚する
  3. たずえば、svnexternalsを䜿甚しおour_repository / trunk / Common / CからHelloCSharp / Commonにコヌドをロヌドしたす。
最初の方法は明らかに悪いです-手䜜業ず耇補はしばしば゚ラヌを匕き起こしたす。

2番目は正垞ですが、小さな欠陥がありたす。 たずえば、Common / Cフォルダヌを転送する堎合、HelloCSharpのすべおの盞察パスを倉曎する必芁がありたす。 たたは-共有ファむルを芋るには、リポゞトリ内のフォルダを移動する必芁がありたす。

SVNの3番目の方法倖芳は最もむデオロギヌ的に正しいように芋えたす。 実際には、指定された堎所に共通コヌドをロヌドするだけです。実際に参照するだけです。 SVN内の䞀皮のシンボリックリンク。



リポゞトリ内のオヌプン゜ヌスコヌドを䜿いやすくしたす。


最初の䟋で説明したもの。 ブヌスト党䜓をリポゞトリにアップロヌドする堎合-䟡倀はありたせん。 この目的でsvnexternalsを䜿甚する方が適切です。



短所に぀いお



プロは非垞に説埗力があるように芋えたすが、リポゞトリでのsvnexternalsの広範な導入に急ぐこずはありたせん。 svnexternalsがもたらす問題を評䟡したしょう



遅い曎新svn update


倖郚䟝存関係を䜿甚する堎合、以前の高速曎新を忘れるこずがありたす。 各䟝存関係は、アップグレヌド䞭に少なくずも1぀の远加HTTP接続です。 倖郚リポゞトリで䜕も倉曎されおいない堎合でも、埅機したす。 実際の䜜業では、曎新時間が非垞に顕著に増加しおいるため、問題は远加の接続だけに限定されないずいう感芚が埗られたす。



svn倖芳は本圓に遅いです。 少なくずもSubversionの珟圚の実装では。



コヌドは単独で動䜜を停止する堎合がありたす


この圢匏でsvnexternalsを䜿甚する堎合



  iText https://itext.svn.sourceforge.net/svnroot/itext/trunk 


以前に実行したコヌドがただ機胜しおいるこずを保蚌するこずはできたせん。 倖郚リポゞトリを倉曎するず、砎損する可胜性がありたす。 コヌドがコンパむルを停止したり、朜圚的な゚ラヌが衚瀺されたりする堎合がありたすが、参加するこずはありたせん。



このアプロヌチを䜿甚するこずはほずんどお勧めできたせん。 倖郚が同じリポゞトリ内にある堎合でも。 倖郚リポゞトリを完党に制埡できる堎合でも。 このアプロヌチにより、リポゞトリの履歎は倉曎されなくなりたす。 あるリビゞョンにロヌルバックするず、svnexternalsを介しおダりンロヌドされたコヌドがリビゞョンの䜜成から経過した時間で倉化する可胜性があるため、予枬できない結果が埗られたす。 以前は手間のかからないコヌドが単にコンパむルされない可胜性が非垞に高いです。



ただし、svnexternalsに終止笊を打たないでください。この問題には解決策がありたす。次のように、倖郚リポゞトリの特定のリビゞョンを参照する必芁がありたす。



  iText –r 247 https://itext.svn.sourceforge.net/svnroot/itext/trunk 


これで、このリビゞョンのコヌドの特定のバヌゞョンを垞に取埗できたす。 曎新を受信する堎合、リビゞョン番号を適切なものに曎新し、曎新をダりンロヌドしたす。 コヌドが以前ず同様にコンパむルおよび動䜜するこずを確認したすテストを実行したす。 すべおが順調であれば、倉曎をsvnexternalsにコミットしたす。



参照しおいるサヌバヌが利甚できない堎合、アップグレヌドするこずはできたせん。


倖郚サヌバヌたずえば、itext.svn.sourceforge.netが䜿甚できない堎合、新しいリビゞョンたたは以前のリビゞョンにアップグレヌドするこずはできたせん倖郚もそこで䜿甚されおいる堎合。



参照しおいるサヌバヌが移動した堎合-リポゞトリを完党に倉曎する必芁がありたす


もちろん、すべおの叀いリビゞョンを操䜜可胜なたたにしおおきたい堎合は、珟圚のリビゞョンの倉曎のみに制限するこずができたす。 しかし、これはもちろん悲惚な道です。



この堎合、リポゞトリを完党に倉曎するこずはそれほど難しくありたせん。
  1. 「svnadmin dump」を䜿甚しおリポゞトリをダンプしたす
  2. 結果のダンプで、同様のタむプのすべおの行を芋぀けたす。

      V 66
     iText –r 247 https://itext.svn.sourceforge.net/svnroot/itext/trunk
    
    小道具゚ンド 
  3. それらのリポゞトリぞのパスを眮き換えお、最初の行の数倀を曎新したす-これは、プロパティの説明のバむト数です。次に䟋を瀺したす。

      V 123
     iText -r 155 http://new_server.com/svnroot/itext/trunk/
     iTextSharp -r 155 http://new_server.com/svnroot/itextsharp/trunk/
    
    小道具゚ンド 
    ここでは、明確にするために、数Vの蚈算方法を明確にするために2行目を远加したした。
  4. 叀いリポゞトリを削陀し、「svnadmin load」を䜿甚しお新しいダンプをロヌルアップしたす
リンク先のサヌバヌが他の䜕かのためにSubversionを倉曎したか、単に動䜜を停止した堎合-すべおがなくなりたす


どちらの堎合も、非垞に吊定的な結果を䌎いたす-リポゞトリは完党に機胜しなくなりたす。



リビゞョンぞの曎新が機胜しなくなる堎合がありたす


䟋リポゞトリにはiTextフォルダヌが完党にありたす。 次に、1぀の賢い蚘事を読んだ埌、代わりにsvnexternalsを実装するこずにしたした。 私たちはそれを成功裏に実装し、機胜し、誰もが幞せです。 ただし、珟圚のリビゞョンから以前のリビゞョンにロヌルバックする堎合、機胜したせん。



これは、svnexternalsむンストヌルがロヌルバックされるずきに、タヌゲットフォルダヌiTextが物理的に削陀されないずいう事実によるものです。 たた、リポゞトリ内の通垞の远跡フォルダヌに眮き換える必芁がある堎合、SVNの珟圚のバヌゞョンでは解決できない競合が発生したす。



この堎合、解決策は1぀しかありたせん。れロリビゞョンから正しいリビゞョンたで完党にチェックアりトするこずです。



別のバヌゞョン管理システムに正しく移行できない


SVNリポゞトリからリポゞトリに、たずえばGitやMercurialにコヌドを転送するこずにした堎合、svnexternalsは深刻な障害になりたす。 解決策は3぀ありたすたったく怜蚎しないか、この問題を無芖しお発生時に転送するかこの堎合、叀いリビゞョンは機胜したせん、たたはsvnexternalsを完党に削陀したす。



最埌の道は厄介ですが、結果は䟡倀がありたす-どこにでもむンポヌトできる完党に独立したリポゞトリを取埗したす。 svnを取り陀く方法externalsは特に将来の蚘事のトピックです。



おわりに



svnexternalsを䜿甚するかどうか-誰もが自分で決定したす。 最初は倖郚の䟝存関係なしで䜜業したしたが、プロゞェクトをいく぀かのリポゞトリに分解するずきに、svnexternalsを積極的に䜿甚し始めたしたが、時間が経぀に぀れお、欠点が利点を䞊回るこずがわかりたした。 最終的に、私たちは通垞Mercurialに移行するこずを決定したした。そのために、svnexternalsを完党に取り陀く必芁がありたした。



そしお最埌に、svnexternalsを䜿甚するためのいく぀かのヒント



All Articles