問題タブ [git-p4]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - git-p4 でファイル全体の履歴を取得する
以前の質問で述べたように、ソース管理を Perforce から git に移行することを検討しています。周りを見回すと、 git-p4
が見つかりました (リンク先のリポジトリにさえないので、もう少し掘り下げる必要があります。実際のgit-p4 スクリプトを見つけるのは難しいです)。
現在、このスクリプトを実行しています。現在のバージョンのファイルが新しい git リポジトリにインポートされますが、何をしても履歴を取得できません。
私が使用している現在のコマンドラインは次のとおりです。
ですから、本当の質問は次のとおりです。履歴を含むP4 デポをインポートできた人がいる場合、どのようにそれを行ったかを知りたいです。
git - git で remotes/p4/master ブランチを追跡する
git-p4 によって最初に生成されたリポジトリを複製しています。git-p4 は、追跡したい「remotes/p4/master」ブランチを使用します。そのレポを複製しているgitに、remotes/p4/masterも追跡するように指示するにはどうすればよいですか? そうすれば、「origin/remotes/p4/master」などをチェックアウトできます。
git - git-p4 と他のリポジトリからのプル
私はラップトップとデスクトップを持っており、git を使用して perforce リポジトリに対して自分の作業を管理する方法を学ぼうとしています。私はデスクトップで git-p4 を正常に使用しており、ラップトップでも分離して正常に使用できます。ただし、できるようにしたいことの 1 つは、最初に変更を git と同期されている p4 ブランチにチェックインせずに、ラップトップからデスクトップに、またはその逆に変更を「プル」または「プッシュ」することです。
1) git-p4 clone を使用してデスクトップにリポジトリをセットアップします。それにいくつかの作業を行い、git にいくつかのコミットを行い、git-p4 にいくつかの送信を行います。すべてが期待どおりに機能していました。2)後で、両方のマシンで作業を行う準備として、ラップトップにレポをセットアップします。同様に、git-p4 を使用して、現在の p4 リポジトリのクローンを作成します (現在、(1) で git-p4 を実行した過去にいくつかのリビジョンがチェックされています)。
さて、私がやりたかったことは次のとおりです。1)デスクトップでいくつかの作業を行います。作業を git にコミットしますが、p4 にはコミットしません。2) ラップトップに移動し、デスクトップ リポジトリから git pull を実行します。3) ラップトップで作業を続け、定期的に git にコミットします。4) (オプション) ラップトップから p4 にコミットします 5) (オプション) デスクトップにプッシュ (またはラップトップからデスクトップにプル) し、デスクトップで作業を続けます。
基本的に、実際に p4 にチェックインすることなく、ラップトップとデスクトップの間で物をプッシュ/プルできるようにしたいと考えています。
これは可能なはずのことのように聞こえますか?もしそうなら、私が上で間違っている手順はありますか?
上記の (2) の「プル」を実行しようとすると、競合があるというエラー メッセージが表示されます。これらの競合は、p4 のブランチの最初のチェックアウトと、 2 番目の git-p4 リポジトリが作成された時刻。言い換えれば、それらは、2 番目のレポに含まれているコードに既に含まれているはずの変更のリプレイのように見えますが、何らかの理由でそうではありませんでした。
私は git にかなり慣れていないので、私の質問がばかげていたり、理解できなかったりしないことを願っています。ご協力いただきありがとうございます。
git - git-p4 が私の画像ファイルを食べています
したがって、git-p4 を使用して問題なく p4 からインポートできます。すべてが機能しているように見えますが、PNG ファイル (およびおそらく他のファイル) が破損しています。
gitattributes と行末の問題について読んだことがありますが、最終結果を変えるものは何もないようです。壊れた画像。
私の属性ファイルは次のとおりです: *.png バイナリ
何か案は?私が理解しているように、gitは、この助けがなくてもpngがバイナリファイルであることを理解するのに十分スマートであるはずです。
これは、p4-git が Perforce からファイルを取得する方法と関係がありますか?
更新: これは Windows 上にあります。大事なことだろうと忘れていました。
git - git-p4 サブミットが「無効なオブジェクト名 HEAD~261」で失敗する
Perforce リポジトリにミラーリングしたい git リポジトリがあります。私は git-p4 スクリプト (非推奨の警告を出さない最新バージョン) をダウンロードし、それを使って作業しています。Perforce から変更をプルする方法を理解しましたが、git リポジトリから変更を同期しようとするとエラーが発生します。これまでに行ったことは次のとおりです。
そのため、オリジンをクリーンな新しいディレクターにコピーし、見栄えの良いマージされたファイルのツリーを取得し、git status
最新であることを示しました。しかし:
git メーリング リストのこのスレッドは関連しているようですが、A、B、および C のすべてで何をしているのかわかりません。誰かが「有効なオブジェクト名ではありません」の意味と、問題を解決するために何ができるかを明確にしてもらえますか? 私がやりたいことは、オリジン/マスターを Perforce に定期的にスナップショットすることだけです。完全な履歴は必要ありません。ありがとう。
git - Gitリポジトリの計画に関する質問
職場では、開発はPERFORCEを使用してコード共有を処理します。回帰テストの準備が整うまで変更をチェックインすることは許可されていないため、「リビジョン管理」とは言いません。個人的な変更セットをリビジョン管理下に置くために、独自のgitを構築し、PERFORCEデポのクライアントビューをgitリポジトリとして初期化するためのゴーサインが与えられました。
ただし、これを行うにはいくつかの困難があります。
~
クライアントビューは、( )のサブフォルダーにあり、独自の履歴を使用してリビジョン管理下~/p4
に置きたいと思います。サブモジュールを使用せずに履歴を分離し~
て保持する方法がわかりません。サブモジュールの問題は、サブモジュールになるリポジトリを作成してから、作成する必要があるように見えることです。ただし、。を除いて、サブモジュールのリポジトリを作成する場所はありません。gitp4cloneを使用してデポの初期クライアントビューを作成するための安全な場所はないようです。~
~/p4
git submodule add <repo> <path>
~
(私は、リポジトリをgitリポジトリのサブディレクトリに初期化または複製することはサポートされていないという仮定に基づいて作業しています。少なくとも、ネストされたgitリポジトリには信頼できるものは何も見つかりません。)
編集:ネストされたリポジトリを初期化するのに十分な
~/p4
ルートのリポジトリを単に無視していますか?私の__git_ps1関数は、gitリポジトリの無視されたサブディレクトリにアクセスしたときに、まだgitリポジトリにいると見なしているので、そうは思わない傾向があります。~
~/p4
git p4 syncによって作成された「リモート」リポジトリを〜/p4のブランチにする必要があります。バックアップされないように、すべてのコードを〜/p4に保持する必要があります。実際にはローカルブランチである「リモート」ブランチからプルできますか?
これは便宜上のものですが、聞いてみれば学べると思いました。プロジェクトの99%については、最初のコミットオブジェクトとしてp4ヘッドリビジョンから始めたいと思います。残りの1%については、p4の履歴全体を吸い取って、gitで閲覧できるようにしたいと思います。IOW、初期化が完了した後、remotes / p4/masterブランチの最初のコミットには次のものが含まれます。
ブランチに
remotes/p4/master
はY個のコミットが含まれます。Yはファイルを含むチェンジリストの数であり//depot/prod/Foo/Bar/*
、履歴内の各コミットはそれらのp4チェンジリストの1つに対応し、HEADはp4のヘッドのように見えます。
編集:meagarの答えは私にはうまくいきませんでした。
私は〜を初期化し、それにいくつかのコミットをチェックインしました。〜/ p4を無視しましたが、〜/ p4はどのコミットオブジェクトにもありません。=:
次に、チェックアウトしたいブランチである〜/ p4/prodに移動しました。しかし、このリポジトリは壊れています:
編集編集:おっと、私は何かをコミットするのを忘れました~/p4/prod
。私は今gitp4sync // depot/prodを試しています...
git - git-p4 同期が機能しない - 不思議なスタック トレース
git-p4 を使用して perforce デポのクローンを作成しようとしています。git-p4 スクリプトで問題が発生し続けています。ここで、git-p4 は定義されていない dict キーにアクセスしようとし、トレースをスローします。
私はスクリプトに入り、その時点でファイル dict を印刷し、さらに詳細を取得しました。明確さと匿名性のために修正します。障害のある dict は次のようになりました。
私のp4クライアントは次のようになります。
ご覧のとおり、欠陥のある dict はクライアント ビューに存在しないファイルです。これが問題の原因だと思います。ただし、明らかに --use-client-spec を指定してコマンドを実行しています。私も試してみましgit config git-p4.useclientspec true
た 詳細な出力により、ビューが引き出されているように見えます
実行するp4 -u mkramer -c mkramer client -o
と、正しいビューが表示されます。
実行するp4 -u mkramer -c mkramer files //depot/prod/...#head
と、ビューにないファイルが表示されます。
ソフトウェアのバージョン:
git - --detect-branches を git-p4 で動作させるにはどうすればよいですか?
私の p4 リポジトリの構造は次のようになります。
ただし、git-p4
「プロジェクト」のクローンを使用すると、3 つのブランチすべてがブランチとは見なされず、すべてが単一のマスター ブランチにクローンされます。
これは私が呼び出す方法ですgit-p4
:
git-p4
3 つのブランチを持つ" " の git データベースを作成することを期待していましproject
た。プロジェクトのルートは、ブランチ名の後のパスの部分にマップされます (たとえば、" " ( )//depot/project/branch1
というサブディレクトリがある場合、私のローカルファイル システムは3 つの git ブランチのようなものにする必要があります)。lib
//depot/project/branch1/lib
/git_project/lib
私が期待していることは間違っていますか?私はgit-p4
間違って呼び出していますか?
git - ブランチの名前空間を使用して、多くのバージョンの git リポジトリを効率的にバックアップします
職場では、Perforce を使用してバージョン管理を行っています。これには問題があります。1) この集中型モデルでは、回帰の準備が整うまで変更をチェックインできません。これは、開発プロセス中に改訂管理がないことを意味します。2) デポのクライアント ビューをバックアップしないので、チェックインするまで作業は安全ではありません。 3) 統合ブランチを設定しない限り、コードを共有するのに問題があります。これらの問題を克服するために git を使用したい開発者向けに、オプションの git ワークフローをセットアップしようとしています。
計画では、git-p4 を使用して perforce サーバーとやり取りし、プライベート git リポジトリを作成します。これで 1) が処理されます。Git Pro ( http://progit.org/book/ch5-1.html ) に示されている統合マネージャーのワークフローを使用して、開発者に公開リポジトリを公開させ、3) を処理する予定です。
最後に、開発者が変更をプッシュして夜間バックアップ/オフサイト バックアップに取り込めるようにする場所が必要です。現在、クライアント ビューをバックアップしない理由は、全員のクライアント ビューのアーカイブ バックアップを毎晩行うのはスペース効率が悪いからです。多くの開発者がいて、彼らは多くのコードを作成しています。全員のクライアント ビューを重複してバックアップすることはできません。彼らが行っている固有の変更のみを保持したいだけです。
omni-backup
私の考えでは、誰もがすべてのブランチをプッシュできる (そして自由に代替案を提案できる) 1 つの裸の git リポジトリを と呼びます。これは、git のスペース効率の良い sha-1 ハッシュを利用し、各ファイルの一意のバージョンのみがバックアップされるようにします。トリックは、スペース効率を得るために、すべてのバックアップ リポジトリが同じリポジトリの一部である必要があることです。
問題は、まったく異なるブランチを持つ 2 人がブランチに同じ名前を選択した場合です。EG Bob にはfeature
ブランチがあり、Jane にはfeature
ブランチがありますが、それらは異なる機能のためのものです。Bob が omni-backup にプッシュした場合、Fastforward マージではないため、Jane はプッシュできません。
ここで理想的に実現したいことは、Bob が機能ブランチをプッシュすると、ブランチの名前がリモートで に変更されることbob-feature
ですomni-backup
。そして、 から機能を引き出すとomni-backup
、 に戻りbob-feature
ます。
これを git で実現するのはそれほど簡単ではないようです。http://www.kernel.org/pub/software/scm/git/docs/git-receive-pack.html post-receive フックに記載されているプッシュ フックを使用して、直後に参照の名前を書き換えることができるようです。それが書かれていて、帰り道でプロセスを逆にするために何かをすることができましたが、それは壊れやすいと感じています. 誰でも良いアイデアがありますか?
編集:VonCの場合(コードがコメントを吸うため)VonC、あなたのやり方は有望に聞こえますが、それがフェッチであるという事実が名前空間の問題をどのように打ち負かすかわかりません。ブランチの名前を変更する方法を知っているcronjobを提案していますか?
のように(本当に汚い):