スキップしてメイン コンテンツに移動

[Mercurial] このマージいらなくないか?

Android アプリ開発では Mercurial を使用しています。
二人で開発しているときに感じるのが「このマージいらなくないか?」ってことです。



作業者Aが作業開始をして中央リポジトリーを作成しました。
作業者Bが中央リポジトリーからローカルにcloneしました。

作業者AはファイルAを更新しています。
作業者BはファイルBを追加、更新しています。

作業者Aは自分の作業が完了するまで中央リポジトリにはプッシュしませんでした。
作業者Bはローカルにコミットする度に中央リポジトリにプッシュします。

作業者Aが中央リポジトリにプッシュしようとしたら失敗しました。
中央リポジトリから pull して merge します。merge したら commit して・・・
さぁ push しよう!としたら、またプッシュできませんでした。
原因は作業者Bが新しいチェンジセットを中央リポジトリにpushしていたためです。

作業者Aは中央リポジトリから pull して merge して commit して・・・
ようやく中央リポジトリへの push ができました。

このマージ作業必要?作業者Aと作業者Bはまったく関係ないファイルを更新してるんだけど・・・このマージっていう履歴必要?

コンソールで見るとこんなかんじ

特に問題は無いんです。これでもいいんです。不具合がなければそれでいいんです。

今回の例ではマージを2回行いました。この2回やる必要はなかったんじゃないか?とおもいます。

じゃぁどうする?は、別記事で書こうと思います。

これがいい!っていう答えはもってませんのでお許し下さい。

こういうふうにすれば?という情報をお持ちの方はぜひコメントでお知らせください。
飛び跳ねて喜びます。見えないと思いますがw

コメント

  1. ファイル単位でしか履歴管理していない CVS などと異なり、Mercurial
    では『ある時点での管理対象ファイルのスナップショット』を管理してい
    ます。

    内部的には、主にリビジョン間の差分を管理しているので、この単位を
    『チェンジセット』とも呼びますが、内部実装上は差分データの格納を主
    体に実現されている、というだけで、あくまでコンセプトとしては『ある
    時点での管理対象ファイルのスナップショット』の管理になります。

    2つのリビジョンをマージする場合、マージ実施リビジョンでは、管理下
    にある各ファイル毎に、マージ対象リビジョンのどちらの内容を反映させ
    るのか?あるいは全く別の第3の内容に改変するのか?ということを記録
    する必要あります。

    そのため、一見無駄なように見えても、マージリビジョンは必要なのです。

    個人的には、履歴が 100 を超えたあたりから、"hg log" 出力は『全部を
    見る』ものから、『条件指定で抽出した結果を見る』ものに感覚がシフト
    します。

    例えば:

    - "hg log -M": マージ以外のリビジョンを表示
    - "hg log -M foo/bar": foo/bar 配下のファイルのマージ以外のリビジョン
    - "hg log -b hoge -M": 名前付きブランチ hoge のマージ以外のリビジョン

    みたいな感じですね。

    どうしても『マージリビジョンを作りたくない』のであれば、rebase や
    MQ といったエクステンションの利用を検討してみては如何でしょうか?

    返信削除
    返信
    1. コメントありがとうございます。

      マージ以外のリビジョンを表示・・・っていうことができたんですね^^

      マージリビジョンを作りたくないというよりは、履歴を見た時に「マージしました」とかいうのが鬱陶しく感じてたので、マージする回数を減らせばいいんじゃないかな?なんて思ってました。

      履歴の見方を考えたほうが気が楽になれそうです。

      ありがとうございます。

      削除

コメントを投稿

このブログの人気の投稿

Android ロックアプリを作る -調査編 -

Android 端末のスクリーンがOFFになると端末がロックされて、
スクリーンがONになるとロック画面が表示されます。

ロック画面は指の軌跡かパスワードを入力することで解除できます。

このロック画面をアプリとして作ってみたいと思い調査を始めることにしました。

調査の方針としては


色々なロックアプリをダウンロードしてみる。それぞれのパーミッションを見てみる。

という感じです。


色々なアプリをダウンロードしてみる。

まずはロックアプリ特集とかを探してみます。

Google 先生に聞いてみよう > Android ロックアプリ
結構出てきますね。


WidgetLocker LockscreenLockBot ProFロックスクリーン



それぞれのパーミッションを見てみる。

WidgetLocker Lockscreen



android.permission.VIBRATEandroid.permission.DISABLE_KEYGUARDandroid.permission.RECEIVE_BOOT_COMPLETEDandroid.permission.EXPAND_STATUS_BARandroid.permission.GET_TASKSandroid.permission.REORDER_TASKSandroid.permission.SET_PREFERRED_APPLICATIONSandroid.permission.WRITE_SETTINGSandroid.permission.WAKE_LOCKandroid.permission.CALL_PHONEandroid.permission.READ_SYNC_SETTINGSandroid.permission.GET_ACCOUNTSandroid.permission.READ_LOGSandroid.permission.SYSTEM_ALERT_WINDOWandroid.permission.WRITE_EXTERNAL_STORAGEandroid.permission.INTERNETandroid.permission.ACCESS_NETWORK_STATEandroid.permission.ACCESS_WIFI_STATEcom.android.vending.CHECK_LICENSE
LockB…

携帯電話、タブレットの判定にピクセルではなくインチを使う

色々な案件に関わっていると、スマートフォンなのかタブレットなのかの判定をするためにピクセルを使用しているソースを見ることが多くあります。

幅、高さのそれぞれのピクセル数がある値を超えたらタブレットと判定する。


これはだめですよね

HTC j butterfly  はタブレットと判定されることが多くあります。




ディスプレイは約5インチ
w x h : 1080px x 1920px

5インチなので画面サイズが大きいということでタブレットという判定でもいいかもしれない・・・と思ったりしますが7インチ以上をタブレットと判定したい。。。




ピクセル数は画面のサイズ(インチ)とは違います。1080px x 1920px は5インチであるとは限りません。

i9220++ スマートフォン Android 4.0 3G GPS 5.2 インチ800万画素携帯(ブラック)

5.2インチ 画面解像度:960 x 540 pixels QHD screen


HTC j butterfly よりも画面サイズ(インチ)は大きいけれど、ピクセル数は少なくなってます。


ピクセル数で判定するのではなく、インチで判定したほうが正確ですね。



プログラムで画面サイズ(インチ)を計算してみましょう。

ディスプレイ情報を取得する ピクセル数(width, height)を取得するdpi (xdpi, ydpi) を取得する1インチあたりのピクセル数(dot per inch なのでドット数?) インチ(width, height) を計算する画面サイズ(インチ)を計算する
こんな流れになります。他に簡単に取得できる方法があれば教えていただけるとうれしいです。

Activity#onCreateに書きました

// ディスプレイ情報を取得する
final DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

// ピクセル数(width, height)を取得する
final int widthPx = metrics.widthPixels;
final int heightPx = metrics.heightPixels;

// dpi (xdpi, yd…

Mac の ターミナルから アプリをアンインストールする adb uninstall

ant uninstall でもいいんだけれど、ant プロジェクトじゃないこともあるのでメモ

adb uninstall パッケージ名
cVolume next をターミナルからアンインストールする場合
パッケージ名は jp.caldroid.cvolume40 なので

adb uninstall jp.caldroid.cvolume40
となる