バージョン管理の使用方法


19

私はlocalhostのphpでWebサイトを開発しています。そのモジュールが完成したら、それをクラウドにアップロードして、友人がアルファテストを行えるようにします。

開発を続けると、多くのファイルがあり、どのファイルを編集または変更したかなどを把握できなくなります。これらすべてを管理する「バージョン管理」として何かを聞いたことがありますが、どのように機能するかはわかりません。

だから、私の質問は次のとおりです。すべての編集/変更/新しいファイルを追跡し、Webサイトの開発中にファイルを管理する簡単な方法/サービス/アプリケーションはありますか。モジュールを使い終えたらすぐに、クラウドにアップロードしたいと思います(Amazon Cloud Serviceを使用しています)。新しいファイルに何かが起こった場合、古いファイルに戻りたいと思うかもしれません。たぶん、1、2回クリックするだけで、最後にアップロードしてから編集または変更したファイルが表示されますか?


5
どのバージョン管理システムを使用するかについて多くの提案がありますが、正直なところ、それらはすべて現在の「手動」の方法よりも優れています。
ヨハン

回答:


28

バージョン管理の一部であるソフトウェア構成管理は、ファイルへの変更を追跡するよりも少し複雑ですが、それから確実に開始できます。ただし、上にリンクされているウィキペディアの記事と、Mercurialに関するJoel Spolkyのチュートリアルを読んでください

開始するには、Mercurial、GIT、またはBazaarのいずれかをこの順序で選択し、IDEおよびオペレーティングシステム用のツールと共にインストールします(Eclipse用のHGEを備えたMercurialが望ましい)。

  1. 作業ディレクトリからリポジトリを初期化します(Mercurialでhg init)。
  2. 追跡するファイルとディレクトリ、および追跡しないファイルとディレクトリを決定します。一般的な規則は、コンパイラーやその他のツールによって生成されたファイルを追跡することではありません。
  3. コマンドを使用して、ファイルとディレクトリをリポジトリに追加します(Mercurialの場合はhg add)。
  4. 追跡したくないファイルのパターンについてツールに伝えます(Mercurialの.hgignoreを編集します)。
  5. コミットを実行して、元のバージョンを追跡します(hg ci)。
  6. たとえ小さなものであっても、論理的なマイルストーンごとにコミットを実行します。
  7. 新しいファイルを作成するときに追加します。
  8. 最後の2つを繰り返します。
  9. 作業ディレクトリとリポジトリをできるだけ頻繁にバックアップしてください。

リポジトリ内のファイルを使用すると、ファイルまたはディレクトリの任意の2つのバージョンの違い、またはプロジェクト全体hg diff)を知ることができ、変更の履歴を見る(hg hist)、変更をロールバックする(hg up -r)。

コードを公開する前にリポジトリにタグを付ける(hg tag)ことをお勧めします。これにより、修正や比較のために公開した内容に簡単に戻ることができます。

別の開発ラインで実験する場合は、メインリポジトリ(hg clone)のクローンを作成し、実験が終了するまでプッシュバックしないことにより、単純なブランチでそれを行います。実験用に別の作業ディレクトリを作成するのと同じくらい簡単です。

実験が新しいアップグレードされたバージョン用である場合は、クローンを作成してからブランチ(hg branch)を使用して、1つの実験が他の実験に干渉することなく、リポジトリのすべてのコピーを更新し続けることができます。

Linus Torvalds(彼のプロジェクトで何万ものファイルと数百万行のコードを扱っています) 、ツールがCVS、SVN、または多くの無料で商用のものではない理由についてGoogleで講演しました。 ; 見る価値があります。


1
Mercurialも好きです。Netbeansのサポートが気に入っています。コーディング中に、最後のコミット以降に変更されたすべての行が表示されるからです。また、製品ツリー内の新規/変更/変更されていないファイルを色分けします。OP:に役立つと思われますI lose track of which file I've edited or changed。HGEもこれを行う可能性がありますが、私は使用していません。
JDイザックス

1
プロセスを説明するための+1およびツールを使用してそれを行う方法の一部。
ドナルドフェローズ

サイド質問として、.xcodeprojXcodeがiOSプロジェクトに使用するファイルは、Mercurialに無視するよう指示するものと考えられますか、それともファイルの同期を保つことが重要ですか?
ケビン・ヤップ

1
@Kevin Xcodeについては知りませんが、最新のIDEとツールには、プロジェクト全体(言語とライブラリのバージョン、コードのフォーマット規則、依存関係など)とユーザー設定(ものを置くディレクトリ、パネルレイアウト、スキン、フォントサイズ、個人署名)。前者は、チームが同意すればリポジトリに含めることができます。リポジトリからの更新は、他の誰かの設定であなたの設定を上書きし、それはすぐに迷惑で逆効果になるので、後者は含まれるべきではありません。
アパララ

1
@John:NetBeansは、サポートするすべてのVCSに対してこれを行います。この時点では、IDEの基本的な機能にすぎません。
マイクバランチャック

13

Gitを強くお勧めします。ここでそれについて学ぶ:https : //lab.github.com/

Gitが気に入らない場合は、他のバージョン管理ソリューションがあります。SVNをチェックアウトできます。


1
Gitの日常ユーザーとして、重要なコマンドを選択するのは非常に簡単で直感的だと付け加えたいと思います。そして、それに対するサポートは素晴らしく、助けを求めても失われることはありません。SVNを使用しましたが、私にとっては簡単ではありませんでしたが、多くのユーザーにとっては問題ないかもしれません。
ムハンマドウスマン

1
+1考慮事項:人々はsvn(VCS)からgit(a DVCS-d = distributed)に移行することを選択しますが、GITからSVN(選択により)に移行することは選択しません。
マイケルデュラント

7

あなただけですか?、DVCSを使用してください

直感に反するように聞こえますが、分散型バージョン管理システム(mercurial、git、bazaar)は、一元化されたシステム(svn、cvs)よりも優れています。なぜですか、それをマシンにインストールし、リポジトリをローカルで実行するだけです。svnなどの集中型システムでは、クライアントとサーバーをセットアップする必要があります...そして、サーバーに接続して変更を保存する必要があります。

DVCSを使用すると、ローカルリポジトリ、および必要に応じて、bitbucket.orgやgithub.comなどのサービスを使用できます。

私見、mercurialは最初から友好的で同等のDVCSです。

他にありますか?、DVCSを使用してください!

チームとの作業にDVCSを使用する場合、多くの利点があります。集中システムとは対照的に最も重要なのは、コミットの競合がないことです。これは、技術的に、各個人のリポジトリがブランチであり、これらのブランチはあなたのためにマージされ、あなたは気付くことさえありません。つまり、このようなバージョン履歴を持っているのではなく、人々が彼らの仕事を一直線に集中させています:

ここに画像の説明を入力してください

誰もがアドホックにコミットするようなものになります:

ここに画像の説明を入力してください

各自は、バージョニング中に(つまり、コミットするために競争するのではなく)自分の作業について心配するだけで、コミットするためだけにサーバーへの接続を心配することはありません。

がんばろう


1
+1非常に良い例!最新のツールを使用して、複雑なマージツリーに存在しない痛みを強調するように編集する必要があります。
アパララ

5

簡単に言えば、多くの選択肢がありますが、その中でもSubversion(SVN)とGitが最も人気があるように思われます(したがって、Webで解決策を見つけるのが最も簡単です)。

両方とも異なります。SVNは単純ですが、Gitではサーバーを起動する必要はありません-バージョンをローカルで制御できます。

Linuxがあり、Gitの使用を開始すると仮定します。

  1. Gitをインストールする
  2. ディレクトリに移動し、コマンド「git init」を実行します
  3. ファイルを追加する方法、変更を確認する方法、それらをコミットする方法を学ぶ...
  4. ...さらに高度なものを実行する(ログの確認、変更の取り消し、ファイルの無視、ブランチの作成、それらのマージ、リモートの作成と使用、サブモジュールの使用、SVNサポートの使用など)。

これがあなたのスタートに役立つことを願っています。


1
SVNはサーバーを必要としませんが、リポジトリが動作しているディレクトリとは異なるディレクトリにある必要があります。SVNとCVSは、一般的に、GITやMercurialなどのツールのおかげで非推奨になります。これらのツールは、毎日の作業にネットワーク接続を必要とせず、共同および分散ソフトウェア開発に中央リポジトリを必要としません。
アパララ

これは実際にはローカルホストでSVNリポジトリサーバーを作成するのと同じだと思いませんか?必要なのは、中央リポジトリを設定して維持することです。ファイルを移動するときは、SVNリポジトリにアクセスできることを確認してください(ファイルを別のマシンに移動するたびに中央リポジトリ全体をコピーすることも考えないでください)。また、Subversionは非推奨ではないと思います(ただし、CVSについては話していません)-それは単に中央集権化されており、場合によっては中央集権化を実施することをお勧めします。
タデック

Apalala、いくつかの質問:Mercurialはどのユーザーが特定の変更を作成した情報をどのように処理するのか?Gitでは、それを変更し、他の誰かとして変更をコミットすることができます。そのため、混乱が生じます(コミッターとサブミッターを区別する機能がありますが、それは十分に明らかではありません)。Mercurialは、この分散バージョン管理関連の問題を解決しましたか?
タデック

2
@Tadeckこれは、MercurialとGITが私の理解する方法ではありません。これらの中で、コミット、プル、またはパッチによって、リポジトリに入る内容を一人で担当します。分散リポジトリでは、誰かがプッシュ特権を持っている場合、あなたはすでに心からそれらを信頼しています。Linus Torvaldsがこの講演で説明しています:youtube.com/watch
v

@Tadeck SVNに関しては、よく使用しましたが、CVS(少なくともプレーンASCIIリポジトリがあり、破損しないように十分に成熟している)に対して改善はないと考えました。繰り返しになりますが、トーバルズは以前リンクしたビデオでそれをうまく説明しています。オフラインで作業できず、マージできないため、古いSCMツールは非推奨になります。
アパララ

2

Apalalaが示唆しているように、hginitをチェックアウトすることをお勧めします。バージョン管理は初めてなので、最初のページをスキップできます。これで良いイントロが得られるはずです。その後、特定の質問があればSOに投稿できます。


0

私は多数意見に反対し、Subversionを推奨します。Subversionは使いやすく、個人や小さなチームが必要とするすべての機能を実行します。これは成熟した製品であるため、世に出ているすべてのIDEが適切にサポートしています。ええ、Gitのすべての機能を備えているわけではありません。(私はMercurialを使用したことがないので、それについては説明しません。)しかし、ほとんどの開発者はこれらの追加機能を実際に必要としません。

複数のリポジトリ?それらには正当な用途があると確信していますが、私はそれらに遭遇したことはありません。

ネットワークにアクセスせずにローカルコミットを行うことができますか?いくつかの個別の変更を行っており、リポジトリサーバーにアクセスできない場合、それは素晴らしいことですが、正直なところ、どのくらいの頻度で発生しますか?

Gitを使用すると、分岐とマージを簡単に処理できます。しかし、一人のチームにとっては、それほど大したことではありません。

Linuxカーネルの規模の何かについては、ええ、Gitを使用してください。残りの人にとっては、Subversionで十分です。


ダウン投票。SVNにはないGitの機能(軽量分岐や簡単なマージなど)は、大きなプロジェクトと同じくらい小さなプロジェクトでも役立ち、おそらく不可欠です。
マルネンライボウコーサー

1
@ MarnenLaibow-Koserええ、それは当時の私の意見でしたが、Gitを数年間専門的に使用した後、私はあなたに同意する必要があります。
マイクバランチャック

優れた!あなたは同化されます。:D
Marnen Laibow-Koser

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.