我知道可以按mPlayer.start();
当前存储库的内容创建,更新或删除mPlayer.stop();
。例如:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Vibrator vibrator = (Vibrator) MainActivity.this.getSystemService(Context.VIBRATOR_SERVICE);
MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.aaanicholas);
Vibrator v = (Vibrator) this.context.getSystemService(Context.VIBRATOR_SERVICE);
final CheckBox vibrateBoxStrong = (CheckBox) findViewById(R.id.checkPowerStrong);
vibrateBoxStrong.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.fansound1);
if(vibrateBoxStrong.isChecked()) {
v.vibrate(1000); // it will vibrate for 1000 milliseconds
mPlayer.start();
} else {
mPlayer.stop();
vibrator.cancel();
}
}
}
);
}
}
删除remote-tracking branch
。但是当地分支机构更新local branch
是一种好习惯吗?如果是,是否还有其他用途?
答案 0 :(得分:2)
首先,让我们定义术语远程跟踪分支。远程跟踪分支只是一个引用,其完整拼写以refs/remotes/
开头,例如示例中的refs/remotes/origin/master
。在与Git的大多数正常交互中,我们删除refs/remotes/
部分并且只写origin/master
,但有时 - 与较低级别,面向脚本的Git命令一样,或者在执行像您的示例这样的奇怪事情时 - 它&# 39;必须完全拼写出来。
现在,远程跟踪分支的目的是保持追踪存储在分支上的ID < strong>远程 s(因此得名)。因此,如果我们仔细查看您的问题:
...正在通过本地分支更新远程分支这是一个好习惯吗?
我们需要注意一些事情:这不是更新&#34;远程分支&#34; (我们尚未真正定义),而是更新远程跟踪分支,即名称以refs/remotes/
开头的其中一个本地实体。我们还要注意,您明确地删除远程跟踪分支(这是一种非常严格的更新形式:-))。
尽管如此,假设你只是说了一句话而且确实意味着&#34;远程跟踪分支&#34;:这样更新它是一种好习惯吗?不一般,没有。
但是,让我添加更多背景。我还需要在这里定义术语 refspec 。 refspec只是一对引用(如master
或origin/master
,或其完全拼写的版本,分别为refs/heads/master
和refs/remotes/origin/master
),以冒号{{分隔1}}角色。左侧的引用称为源或 :
,右侧的引用称为目标或 src
。 (可选)您可以在配对前加上加号[{1}},最多省略 dst
和/或 +
。如果省略 src
,您可以(也可能)省略冒号:例如dst
是没有目的地的来源。省略 dst
时需要冒号:git fetch origin master
不能拼写为src
。
(当你忽略一半refspec时,的意思在git push origin :foo
和git push origin foo
之间变化。我不会完全描述这一点,只是足以覆盖这里感兴趣的案例。)
git fetch
和git push
自Git版本1.8.4起,git fetch
和git push
都会机会性地更新远程跟踪分支。也就是说,如果您有Git联系人远程 R 并获取或设置其分支 B ,并且您的配置说明要跟踪{em> B {1}}(正常设置),你的Git将(从1.8.4开始)更新远程跟踪分支。 (在1.8.4之前,Git对git push
进行了机会更新,但对git fetch
进行了机会更新。)
refs/remotes/R/B
只需运行push
(无需额外的refspecs)即可更新所有fetch
远程跟踪分支机构。但是假设您之前已经执行了此操作,并且您的Git已将--prune
分支复制到git fetch origin
,从那时起,某人已删除分支refs/remotes/origin/
xyz
refs/remotes/origin/xyz
1}}?
今天发生的事情是你的Git会保留你的xyz
(大概是你还在使用它的时候)。要告诉您的Git它应该自动修剪您拥有的远程跟踪分支(远程不再具有该分支),只需将origin
(或origin/xyz
)添加到您的命令中:
--prune
您的Git现在删除您在-p
下列出的任何远程跟踪分支,该分支仍未跟踪名为$ git fetch --prune origin
的远程实际分支。
您也可拼写:
origin
并且在某些Git版本中存在一些错误,其中两个命令中的一个有效,另一个没有(我不确定哪个版本,哪个版本成功)。
作为一般规则,您应该让Git自动更新远程跟踪分支。有几种特殊情况,您可能希望手动更新它们,例如手动修改配置以更改远程名称,或更改应用于远程(origin
行)的映射,或遇到像我刚才提到的那样的bug。或者,例如,如果您刚刚使用了无源git remote update --prune origin
或remote.remote.fetch
来删除分支 - git push
- 并且您的网络连接速度非常慢,你可能太急于跑git push --delete
并等待。
在这种情况下,虽然git push origin :foo
从您的存储库中删除git fetch -p origin
,但您也可以使用更直接的命令:
git push . :refs/remotes/origin/foo
事实上,对远程跟踪分支的任何更新都可以通过origin/foo
(或基础&#34;管道&#34;命令,$ git branch -r -d origin/foo
Deleted remote-tracking branch origin/foo (was 5ace313).
)完成,就像对本地分支的更新一样通过git branch -r
完成(没有git update-ref
)。我认为有充分理由使用git branch
来更新分支的唯一地方是实现-r
的结果而不实际检查分支。 1
1 具体而言,git push .
尝试快速转发本地ID git merge --ff-only
- 这可以解析为有效的任何内容对象ID - 参考 git push . x:y
。当 x
是本地分支时,它相当于:
y
除了它根本不触及工作树。除了原子性和类型检查问题以及可能的符号引用问题之外,它也相当于这个shell命令序列:
y
请注意,git checkout y && git merge --ff-only x && git checkout -
会将x="$1" y="$2"
# resolve x to an object ID
xid=$(git rev-parse $x) || exit
# resolve y to a reference
yref=$(git rev-parse --symbolic-full-name $y) || exit
[ -z "$yref" ] && { echo "fatal: $y: not a valid reference"; exit 1; }
# make sure the current value of y is an ancestor of (resolved) x
git merge-base --is-ancestor $yref $xid || { echo 'not a fast forward'; exit 1; }
# ok, it is a fast forward: update
git update-ref -m "fast forward" $yref $xid
之类的符号引用解析为其引用的名称,例如--symbolic-full-ref
。这可能不合适,但origin/HEAD
没有明显的标志来验证引用名称是否有效并将其转换为完全限定,但不会将符号名称扩展到其目标。
答案 1 :(得分:0)
我不太确定你在问什么。如果你想要一种替代方法来删除这样的远程分支,那就是:
git push origin --delete branchName
当我通过本地更新遥控器时,我已确保git历史记录排成一行,因此没有强制推动。
当我通过本地删除遥控器时,就是当分支的功能已经实现,并且刚刚完成了对主控的拉取请求。远程分支中的所有更改现在都在master中,因此我们可以安全地删除分支。