既存のディレクトリ(フォルダ)にgit cloneして上書きしたい
SubversionのリポジトリをGitLabに移行後、今まで開発していたフォルダでgit cloneしてみるとエラー。
fatal: destination path 'api' already exists and is not an empty directory.
環境: CentOS 6.6, git 1.7.1
一旦フォルダごと削除して、git cloneし直せばいいのだけれど、権限の設定や本番環境でも削除してgit cloneはやりたくない。
gitの仕組みを理解すれば簡単なことだった。
腑に落ちるまで時間がかかった。
<2015/07/06 Modified>
実機コンソールでコマンド実行すること。Windowsから共有ファイル経由で実行すると時間が掛かり過ぎる(失敗する)。
本番環境でブランチとマージしたときに実行したコマンド
# cd /path/to/project/
# git init
# git remote add origin git@gitlab.hoge.jp:suganuma/project-wordpress.git
# git fetch origin
# git checkout -b branch-name
# git checkout origin/branch-name -- .gitignore
# git add --all
# git add -f wp-config.php
# git merge origin/branch-name
エラーになったらブランチ上のファイルで上書き。移行した直後ならこれをやらなくてもいいはず。
# git checkout origin/branch-name -- /path/to/file
# git merge origin/branch-name
svnとお別れする
# rm -rf .svn/
< 2016/03/31 追加 >
上のやり方でマージできなかったので「theirs」を使った方法
途中までは一緒
# cd /path/to/project/
# git init
# git remote add origin git@gitlab.hoge.jp:suganuma/project-wordpress.git
# git fetch origin
# git checkout -b branch-name
# git checkout origin/branch-name -- .gitignore
何かあった時でも戻せるように一度コミット
# git add --all
# git commit -m 'Before convert to git'
リポジトリを優先で更新。最後の「.」(ドット)がポイント
# git checkout --theirs origin/branch-name .
コミット
# git commit -m 'Merge with branch-name'
git pullできるようにしておく
# git branch --set-upstream-to=origin/branch-name branch-name
確認
# git pull
コミットを一つにまとめる
# git rebase -i
やっぱりフォルダを削除してgit cloneした方が早い。権限の設定が必要なら別ファイルにまとめておく。
まずは開発ディレクトリをgitローカルリポジトリにする
# cd /path/to/project/
# git init
「origin」という名前でリモートリポジトリを追加
# git remote add origin git@gitlab.hoge.jp:suganuma/project-api.git
ローカルリポジトリを最新にする
# git fetch origin
確認
# git branch -a
「origin/master」とマージする
# git merge origin/master
確認
# git branch -a
ローカルリポジトリが「master」ブランチになっているはず。
試しにファイルを追加してみる
# vi test.txt
# git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# .svn/
# test.txt
nothing added to commit but untracked files present (use "git add" to track)
ファイルをローカルリポジトリに追加
# git add test.txt
# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: test.txt
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# .svn/
なかったことにする
# git reset
# git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# .svn/
# test.txt
nothing added to commit but untracked files present (use "git add" to track)
git resetに関しては下記記事がわかりやすい。
Mac上にあるTitaniumプロジェクトでmergeしようとしたらエラー。
環境: OS X Yosemite 10.10.3, git 2.3.2 (Apple Git-55)
$ git merge origin/master
error: Untracked working tree file 'CHANGELOG.txt' would be overwritten by merge.
fatal: read-tree failed
svnからそのまま変換しただけなので一緒のはず。
まずは.gitignoreを作成
$ vi .gitignore
/.project
/.settings
/.svn
/build
/node_modules
確認
$ git status
追加してマージ
$ git add --all
$ git merge origin/master
確認
$ git status
svnコマンドも使える
$ svn status
.gitignoreをコミット
$ git commit -m 'add files for git'
アカウントを確認してプッシュ
$ git config --list
$ git push origin master
< 2015/06/05 Modified >
別プロジェクトで下記エラーになったとき。
$ git add --all$ git merge origin/master
error: Entry '.gitignore' would be overwritten by merge. Cannot merge.
fatal: read-tree failed
ブランチ作成
# git checkout -b develop
developにコミット
# git commit -m 'add files for merge'
masterに切り替え
# git checkout master
確認
# git status
この状態がmasterと同期している。
developにある「.gitignore」を取ってきて、プッシュ。
# git checkout develop -- .gitignore
# git commit -m 'modified .gitignore'
# git push origin master
無事完了。developブランチは削除してもいいはず。
試しにこの状態でdevelopブランチとマージしてみた。
# git merge --no-ff develop
コンフリクトがいっぱい。。。するんじゃなかった。。。
ファイルは一緒のはず。
たぶんssh経由のCentOS上でgitコマンド叩いたのと共有ファイル経由でWindowsからgitコマンド叩いてたので、ファイルの権限が変わったからだと思う。
svnが残っているのでそっちで差分を確認。git diffでもok。
# svn status
変更(コンフリクト)になっていたのを修正してadd
# git add --all
# git status
すると(内容を)変更したファイルだけになった。一安心。これでプッシュ
# git commit -m 'merge with develop'
# git push origin master
GitLab上は下図のようになった。最後のコメントを「merge with subversion」とすれば分かりやすかったと思う。
developブランチは削除
# git branch -d develop
< Related Posts >