0

他のチームと共有する SVN サーバーがあり、SVN にコミットする新しいプロジェクトがあります。

まず、次の方法で Git コントロールに追加します。

git init

次に、すべてのファイルを Git に追加します。

git add .

次に、すべてのファイルを Git にコミットします。

git commit -am "Initial Commit"

次に、次の方法で SVN とリンクします。

git svn init https://my_account@my_svn_server_host.com/svn/external/trunk/projectA/

projectAフォルダが存在しない場所。次に、サーバーから更新をフェッチしようとします。

git svn fetch

エラーが到着しました。

W: ファイルシステムに項目がありません: '/svn/external/!svn/bc/5060/trunk/projectA' パスが /usr/libexec/git-core/git-svn 行 1801 に見つかりません

W: SVN からのエラーを無視します。おそらくパスは存在しません: (160013): ファイルシステムにアイテムがありません: '/svn/external/!svn/bc/5060/trunk/projectA' パスが見つかりません

W: 上記のメッセージが表示されても心配しないでください。git-svn は古い履歴を積極的に検索しています。大規模なリポジトリでは時間がかかる場合があります

次に、dcommit を試みます。

git svn dcommit

次に、次のようになります。

Unable to determine upstream SVN information from HEAD history.
Perhaps the repository is empty. at /usr/libexec/git-core/git-svn line 541.

私は何を取りこぼしたか?

Mac OS X 10.7 、MacPorts 2.2.0 を使用しています

更新: @Wes の回答によると、結果は次のとおりです。

# git init
Initialized empty Git repository in /Users/path/to/my/projectA/.git/
# git checkout -b "mychanges"
fatal: You are on a branch yet to be born
# git checkout master
error: pathspec 'master' did not match any file(s) known to git.

おっとっと!動作していないようです。

4

1 に答える 1

0

あなたは本当にそのようにすることはできません。 git svn線形の履歴が必要です (わかりました、git は必要ありません。svn 自体は必要です)。したがって、すべての git 作業は、svn のコミット ツリーの最後に配置する必要があります。

正しいことは、git svn clone最初に を使用してリモート リポジトリをミラーリングし、次にそのチェックアウト バージョンにコミットして を実行することgit dcommitです。

はい、これを行う方法は他にもありますが、上記の方法では、リモート コンテンツをプルする前にコミットを行いますが、これは機能しません。

既存のすべての変更をリモートからバージョンに追加しようとしているだけの場合は、おそらく次の方法で実行できます。

# git init
# git checkout -b "mychanges"
# git checkout master
# git svn init ....
# git svn fetch
# git checkout mychanges
# git rebase master
# git checkout master
# git merge --ff-only mychanges
# git dcommit

それはテストされていませんが、あなたが望むことをするはずです。

于 2013-08-12T13:54:27.717 に答える