日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
2024年11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

[svn] Unable to determine upstream SVN information from HEAD history.

カテゴリー: General
2024-04-01
タイトル

執筆:2024.04.01
編集:2024.04.01


結論
clone時に
--no-metadata
を指定したせいです

相互運用する場合はこのオプションは指定してはいけません



$ 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 859.

$ git svn dcommit

Unable to determine upstream SVN information from HEAD history.
Perhaps the repository is empty. at C:/Program Files/Git/mingw64/libexec/git-core\git-svn line 916.

$ git config --list --local | grep svn

登録間違っていないし、なんだろうこのエラー

選択肢は2個

(1)このままgit運用する

このままgit運用に切り替えてsvn捨ててしまえば問題なし

(2)svnに直接書き込む
  1. gitで空ブランチに切り替える
  2. svn取り込んでチェックアウトする
  3. gitで同じリビジョンに強制上書き
    git checkout [SHA] -f
  4. git checkout master
  5. svn commit
今回はいろいろ削除とか追加の変更があるので
git svn dcommit させてほしい・・・

困った・・・

svn/trunkに戻ってもダメ

$ git branch main svn/trunk

$ git checkout main

$ git merge master --squash && git commit

$ git diff master main

$ git svn dcommit
Unable to determine upstream SVN information from HEAD history.

だめですか ケチ

このコマンドでも同じエラーがでますね
$ git svn info

Unable to determine upstream SVN information from working tree history

$ git checkout svn/trunk
$ git svn info

Unable to determine upstream SVN information from working tree history

根本的にダメってことですね。
svnのrevison対照表が最初から保存されなかった可能性あり

履歴からわからない
わからない。
shaではなく えっ 原始的な方法で管理してるの?

clone時に
--no-metadata
を指定したせいかも。

ということで、

(1) cloneし直してみる
[ --no-metadata は 指定しない ]
コミットログに リビジョンが埋め込まれる
git log -n 1 svn/trunk

git-svn-id: svn://localhost/trunk@番号 xx-xx-xx-xx

svnと連動しているか確認
git svn info

Path: .
URL: svn://localhost/trunk
Repository Root: svn://localhost
....

今度は大丈夫っぽいです。

(2) 新しいリポジトリ

# git remote addで不具合のあるリポジトリを追加する
$ git remote add old-origin ../old-origin

$ git fetch old-origin
(少し時間がかかります)

$ git branch work old-origin/svn/master

$ git rebase --onto svn/trunk old-origin/trunk work

$ git diff old-origin/master work

$ git svn dcommit


コミットのユーザー名が変更されてしまいました
svn: [なし]
git: (no author) <(no author)>

config key: svn-remote.<name>.commiturl

git svn dcommitの問題点
  1. ユーザー名をきちんと設定しないと (no author) でコミットされてしまう。
  2. svn側では空フォルダ残る
    gitはフォルダに対応していないので、gitでフォルダを消してもsvn側では空フォルダが残っている
  3. 数コミットでもdcommitが終わるまで時間がかかる

svnの利点は
gitと違って、先に -f で コミット壊されたとかいうのがないのでいい。

svnはコミットすればするほどサーバーとクライアントの両方でファイルがどんどん増えていくので
適当なところで、移行したい。

コミットしたらサーバーに送るように設定したらsvnと同じような運用にできる? 競合したらpushエラーでわかる。

post-commit フック

git branch -u origin/対象ブランチ名

cd .git/hooks/
cp post-commit.sample post-commit
nano post-commit

.git/hooks/post-commit
git --git-dir=.git push origin

fatal: no upstream
git branch -u origin/対象ブランチ名

コミット前に自動コード整形もしたい?破損する?
.git/hooks/pre-commit
#!/bin/sh

# Execute app1
./app1

# Check the exit status
if [ $? -ne 0 ]; then
  exit 1
fi
要点: (1) スクリプトで書く (2)コミットを認めない場合は exit 1を呼ぶ (3) chmod +x pre-commit を忘れずに


PR

[PR]