6

私は Git ソフトウェアを使用してコミットをプッシュするのが好きですが、私が使用するもの (Gitbox、Github、SourceTree) はすべて、新しいリポジトリを追加するときにローカル リポジトリを要求します。

つまり、私のレポはローカルマシンではなく開発サーバーにあります。

では、Git ソフトウェアはリモート Git リポジトリを開発リポジトリとして使用し、それをメイン リポジトリ (Github や Bitbucket など) にプッシュできますか?

そうしないと、ソフトウェアを使用できず、SSH 経由でコマンド ラインを使用する必要があるようです。

ありがとう

4

5 に答える 5

6

リモートリポジトリの直接操作をサポートするためにフロントエンドに依存しない1つの解決策は、リモートをネットワーク化されたファイルシステムとしてマウントすることです。リモート マシンへの SSH アクセスしかない場合は、FUSE (Linux の場合) またはMac OS Xの OSXFUSEを介してSSHFSを使用してみてください。または、設定とセットアップに応じて、SMB、NFS、DAV、または別のネットワーク ファイルシステムを使用することもできます。 .

コメントで取り上げたもう 1 つの方法は、ネットワーク ファイルシステムを開発マシンからサーバーにエクスポートすることです。これは、現在の作業コピーを一度に複数のマシンにマウントできるようにするためと、サーバーに接続していないときでもローカルの作業コピーを保持できるようにするためです。

あなたが書く:

git ソフトウェアが作業バージョンとしてリモート リポジトリを処理できないことに驚いています。

ほとんどの Git GUI は、コマンドを呼び出すことによって作業の一部を行いgitます。それらがリモート操作をサポートするためには、コア Git も同様にサポートする必要があります。これは C とシェル スクリプトの混合で書かれています。リモートファイルに対応するには、すべてを書き直す必要があります。

テキスト エディタのほうがはるかに簡単です。開くときに 1 つのファイルを読み取り、保存するときに書き込みますが、Git はcommit.

ネットワーク化されたファイルシステムは、すべてのツール (Git など) がリモート ファイルで動作することを意味します。ネットワーク化されたファイル アクセスをサポートするためにすべてのアプリケーションにレイヤーを構築する代わりに、カーネル内で (または FUSE を介して) それを実行し、それをローカル ファイル システムのように扱うだけで、すべてのアプリケーションでそのサポートが無料で提供されます。

于 2012-10-16T19:36:46.570 に答える
2

Git はDVCSであることを思い出してください。何かをコミットするためにリモートサーバーに接続しないという事実は、設計によるものです。

やりたいことは、コードを統合サーバー (実際にコードを実行するサーバー) にプッシュするローカル Git リポジトリーを用意することです。これはデプロイのようなもので、本番環境ではなくテスト サーバーにデプロイするだけです。

これは通常、プッシュ先の共有 Git リポジトリを持つことで実現されます。このレポは裸である必要があります。裸の共有リポジトリに加えて、Apache docroot として機能する共有 Git リポジトリの裸でないクローンが必要になります。

共有リポジトリがコミットを受け取ると、docroot リポジトリが実行されgit pullます。

これは、共有リポジトリでpost-receive フックを使用することで実現できます。

docroot リポジトリは、特定のブランチ (たとえばdevelop) でチェックアウトされます。そのため、他のブランチにコミットしてプッシュしても、サーバーには影響しません。

これにより、複数のデプロイ リポジトリをセットアップできるためprod、それらの 1 つに関連付けられた別のブランチを作成して、実際に本番コードを更新することができます。

また、まったく展開されていない共有ブランチに未完了/進行中の作業を保存できるため、ラップトップで作業していたものが共有リポジトリで安全であることを確認できます。テストサーバーに送信されないのは、それが完全ではなく、テストサーバーが壊れて、他の人が作業できなくなったりする可能性があるためです。

この記事では、そのすべてをセットアップする方法について詳しく説明します。私は前にそれをやったことがあります、それはうまくいきます。

于 2013-07-11T18:47:17.390 に答える