7

Gitで管理されていない、すべてのファイルの最新の正しいバージョンがあると確信している、稼働中のライブWebサイトがあります。表向きはそのサイト用の Bitbucket Git リポジトリもありますが、大きな問題があり、古いものがあります。

私がやりたいことはgit init、ライブファイルをリモートにプッシュして、最終的なリモートHEAD状態がライブファイルの状態とまったく同じになるようにするだけでなく、リモートコミット履歴がそのまま残るようにすることです。

ライブ作業ツリーが別の状態にならないように、これを行いたいと思います。私は新しいブランチを作成し、マスターをリモートでプルし、それらを強制的にマージすることなどを考えましたが、私が知る限り、マスターブランチをチェックアウトして、それらの短い瞬間のためにライブファイルを台無しにする必要がありますすべてが正しく行われたと仮定して、マージ前とマージ中に。

また、ファイルを FTP 送信して、ローカル コンピューターですべての競合/マージを解決し、そこから Bitbucket にプッシュして、ライブ リポジトリにプルダウンすることも考えました。しかし、それは信頼性が低く、危険でもあります。

このようなライブ コードを操作してはならないことはわかっていますが、これは私が陥った状況であり、それを機能させるための最も簡単で安全な方法が欲しいだけです。

(これは重複した質問だと思いますが、私の Google-fu は失敗しています。以前の回答に誘導するときは優しくしてください。)

4

3 に答える 3

0

.gitこれは、ディレクトリを操作するだけで簡単に実現できると思います。

テスト セットアップの作成

cd ~/Desktop/test/
mkdir outdated server
cd outdated && touch testfile1 testfile2 testfile3
git init && git add . && git commit -m "testfiles"
cd .. && git clone --bare outdated/ cloud_hosted_repo

これまでのところ、ローカルにチェックアウトされた のコピー(開発者マシンなど) と同等に扱われるcloud_hosted_repoべきディレクトリとgithub repo、リモート サーバーとして扱われるべきディレクトリがあります。outdatedgithub repo codeserver

サーバーにログインし、サーバー上にデプロイされたプロジェクトを作成します

cd server && mkdir project_location some_other_location
cd project_location/ && touch testfile4 testfile5 testfile6 && cd ..

このプロジェクトの場所が既に git リポジトリである場合は、.git ディレクトリを移動します

mv project_location/.git project_location/.git.backup

元のレポをある場所にクローンし、そこからファイルを消去します

cd some_other_location/ && git clone ../../cloud_hosted_repo/ .
git rm "*" && git commit -m "removed all older files" && cd ..

.gitレポ内を移動する

mv some_other_location/.git/ project_location/ && cd project_location/
git add . && git commit -m "Updated Project" && git push origin master

これで完了です。

git logブランチ内のすべてのコミットを明らかにします。

必要に応じて、追加の複雑さ (バックアップ用に追加のブランチを作成するなど) を追加できます。

于 2013-11-13T14:41:23.167 に答える
0

オンラインのファイルが最新であり、リポジトリのファイルが同じ履歴に従っていることが確実な場合は、現在の Git 履歴をチェックアウトする必要があります。そして、これらのファイルに FTP のコンテンツをコピーして貼り付けるだけです。

次に、FTP からの最新バージョンになり、オンラインで行われた変更が現在の Git 履歴の上に適用されます。

しかし、確かに、2 つのコード ベースが分岐していることがわからない場合、これは「危険な」手順です。しかし、オンライン ファイル履歴がなければ、3 者間マージ (双方向のみ) を行うことができないため、それについては何もできません。

では、そこから。確認するために、行ごとに差分を確認します。履歴が分岐するかどうか疑問がある場合は、その手動のタスクを回避する方法は実際にはありません。

于 2013-11-12T22:47:49.983 に答える