分散型のバージョンコントロールシステムでは、カレントブランチでローカルにコミットされた変更で他のレポジトリを更新します(変更のpushとも呼ばれる)。この概念は集中型のバージョンコントロールシステムには存在しません。
分散型のバージョンコントロールシステムでは他のレポジトリから変更をpullすることにより、ローカルレポジトリのカレントブランチを更新します。
集中型のバージョンコントロールシステムでは、そのレポジトリからカレントVCファイルセットを更新します。
分散型のバージョンコントロールシステムでは、コマンドC-x v P
(vc-push
)は、カレントブランチでローカルにコミットされた変更により他のロケーション(一般的にはアップストリームのレポジトリ(upstream
repository)と呼ばれる)を更新します。プレフィクス引数を与えた場合、このコマンドは実行する正確なバージョンコントロールコマンドの入力をもとめます。これにより変更をどこにpushするか指定できます。デフォルトは、Bazaarではbzr
push、Gitではgit push、Mercurialではhg
pushです。デフォルトのコマンドは常に、ブランチ設定からバージョンコントロールシステムにより決定されるデフォルトのロケーションのレポジトリにpushします。
pullする前にC-x v O
(vc-log-outgoing
)を使用して、アップストリーム送信される変更のlogバッファーを閲覧できます。VC Change Logを参照してください。
現在のところ、このコマンドはBazaar、Git、Mercurialだけでサポートされます。“push”という概念は集中型のバージョンコントロールシステムには存在しません。なぜなら、この操作は変更セットのコミットの一部なので、集中型のVCSでこのコマンドを呼び出すと、エラーをシグナルします。Bazaarのbound branchでこのコマンドを試みたときもエラーをシグナルします。変更セットのコミットは、自動的に変更を(ローカルのブランチがバインドされている)リモートのレポジトリにpushするからです。
分散型のバージョンコントロールシステムでは、コマンドC-x v +
(vc-pull
)はアップストリームのレポジトリに施された変更によって、ローカルレポジトリのカレントブランチと作業ツリーを更新します。これは通常だとリモートブランチのコピー(cloneとも呼ばれる)を更新するために使用されます。プレフィクス引数を与えた場合には、このコマンドは使用する正確なバージョンコントロールコマンドの入力をもとめます。これによりどこから変更をpullするか指定することが可能になります。プレフィクス引数を指定しなければ、ブランチの構成からバージョンコントロールシステムにより決定されるデフォルトロケーションのレポジトリからpullすることになります。
分散型のバージョンコントロールシステムの中で、現在C-x v +がサポートするのはBazaar、Git、Mercurialだけです。Bazaarでは、これは通常のブランチにたいしては、(マスターブランチをミラーリングされたブランチにpullするために) bzr pullを呼び出し、バインドされたブランチにたいしては、(中心となるレポジトリからpullするために) bzr updateを呼び出します。Gitでは、これはリモートのレポジトリから変更を取得して、それをカレントブランチにマージするためにgit pullを呼び出します。Mercurialでは、デフォルトのリモートレポジトリから変更を取得して、作業ディレクトリーを更新するためにhg pull -uを呼び出します。
pullする前にC-x v I
(vc-log-incoming
)を使用して、適用される変更のlogバッファーを閲覧できます。VC Change Logを参照してください。
CVSのような集中型のバージョンコントロールシステムでは、C-x v +はレポジトリからカレントVCファイルセットを更新します。