2011-07-28 17 views
2

最初に、git、ssh、Xcodeの新機能としてお詫び申し上げます。また、私はむしろコマンドラインの恐怖です。Xcode 4 git:ローカルのgitプロジェクトをリモートサーバに移動する

私たちは、クライアントがssh認証プル/プッシュコードとの間で接続するサーバーを実行しています。これは、Xcode 4から、gitコマンドラインを使ってセットアップした既存のプロジェクトに対してはうまく動作します。 Xcode 4を使用してそこからプロジェクトをクローンし、コミットをプッシュするのは本当に簡単です。

私が混乱しているのは、開発者がXcode 4で作成した(チェックインの履歴が多い)ローカルgitプロジェクトの起点/マスタとしてサーバーを設定する方法です。私は隠された.gitフォルダがある見るので、私は試してみました:

のscp -r .git [email protected]:Xcodeの4から

その後MyProject.git、私は先に行くと、それを複製することができます私たちのサーバーから完全に。私は完全なチェックイン履歴を見ることができます。私は変更をプッシュしようとすると、私は巨大なエラーメッセージが表示されます。

リモート:エラー:チェックアウトされたブランチを更新することを拒否:レフリー/ヘッド/リモート
をマスター:エラー:デフォルトでは、非裸のリポジトリに現在のブランチを更新
リモート:エラー:そのため、拒否されました
リモート:エラー:あなたがプッシュしたもので、一致するには 'git reset -hard'が必要です
リモート:エラー:作業ツリーをHEADにします。
リモート:エラー:エラー:「無視」や
リモートにプッシュできるようにするリモートリポジトリに「警告」:エラー:あなたは
リモートに「receive.denyCurrentBranch」設定変数を設定することができ、現在のブランチ。ただし、これはお勧めしません
リモート:エラー:あなたの押した内容に合わせて作業ツリーを更新するようにアレンジしました
リモート:エラー:それ以外の方法。
remote:error:
remote:error:このメッセージをスケルチし、デフォルトの動作を維持するには、
remote:error: 'receive.denyCurrentBranch'設定変数を '拒否'に設定します。 [snip]

私は、開発者がローカルマシン上に持っている貴重なチェックインの履歴を失うことなく、これを正しく行う方法を失っています。

誰かが基本的なステップや概念を指摘できますか?

ありがとうございます!

答えて

9

をレポにしたい場合は、デフォルトでは、現在チェックアウトされているブランチに対してpushが禁止されています。

これを避けるには、中央リポジトリ(誰でもプッシュするもの)は通常bare reposとして作成されます。つまり、バージョン情報とチェックアウトされた作業コピーは含まれません。これらのレポは、慣例により<repo-name>.gitと命名されています。あなたはgit init

git init --bare myrepo.git 

--bareフラグを使用して裸のレポを作成することができますしかし、問題は、あなたが代わりにそこに裸のレポを作成するmy.server.comにローカル.gitフォルダをコピーしたということです。.git/configには、レポが裸であるかどうかという情報があります。作業コピーでは、bareはfalseで、この情報はサーバー上にあります。

(上に書いたように)これを回避するための正しい方法は

  1. サーバーの塗装されていないレポを作成することになる作業コピーでremote
    git remoteadd origin [email protected]:MyProject.git
  2. としてこのレポを追加
  3. ローカルレポの内容をorigin
    git push--force --all origin
  4. にプッシュします
+1

ありがとうございました。あなたはそれを釘付けにした。 –

関連する問題