小编mic*_*el9的帖子

从远程git存储库中恢复未引用的提交

这是情况:一些提交已在远程存储库中完成.

不幸的是,有人这样做push -f,没有远程分支引用这些提交了.

更糟糕的是,我在本地克隆中没有这些提交.

我的目标基本上是恢复那些提交.这些是我尝试的一些事情:

  • git checkout -b recovery <commit_id> :致命:引用不是树
  • git push origin <commit_id>:recovery

    错误:refs/heads/recovery没有指向有效对象!错误:无法推送到不合格的目标:恢复目标refspec既不匹配遥控器上的现有引用也不以refs /开头,我们无法根据源引用猜测前缀.

存储库位于bitbucket上,并且可以从Web界面访问提交,因此它没有被垃圾收集.

git branch recovery commit

6
推荐指数
1
解决办法
797
查看次数

Web扩展中的共享vuex状态(死对象问题)

我正在尝试在Web扩展中使用共享的vue.js状态。

状态存储在后台脚本的DOM中,并在弹出页面中呈现。

第一次尝试

我的第一次尝试是使用没有vuex的简单存储:

background.js

var store = {
  count: 0
};
Run Code Online (Sandbox Code Playgroud)

popup.js

browser.runtime.getBackgroundPage().then(bg => {
    var store = bg.store;

    var vue = new Vue({
        el: '#app',
        data: {
            state: store
        },
    })
})
Run Code Online (Sandbox Code Playgroud)

popup.html

<div id="app">
  <p>{{ state.count }}</p>
  <p>
    <button @click="state.count++">+</button>
  </p>
</div>
<script src="vue.js"></script>
<script src="popup.js"></script>
Run Code Online (Sandbox Code Playgroud)

这在第一次打开弹出窗口时起作用(您可以增加计数器并更新值),但是在第二次打开弹出窗口时,渲染将失败[Vue warn]: Error in render: "TypeError: can't access dead object"。这似乎是由于以下事实造成的:第一个弹出窗口中的vue.js实例store通过设置自己的getter / setter 修改了,自从第一个弹出窗口关闭以来,该实例已被删除,从而使共享状态不可用。这似乎是不可避免的,所以我决定尝试一下vuex。

第二次尝试

background.js

var store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: { …
Run Code Online (Sandbox Code Playgroud)

javascript vue.js firefox-addon-webextensions vuex

5
推荐指数
1
解决办法
707
查看次数

C#中使用union的奇怪的解组行为

我想将类似C的联合导出为字节数组,如下所示:

[StructLayout(LayoutKind.Explicit)]
struct my_struct
{
    [FieldOffset(0)]
    public UInt32 my_uint;

    [FieldOffset(0)]
    public bool other_field;
}

public static void Main()
{
    var test = new my_struct { my_uint = 0xDEADBEEF };
    byte[] data = new byte[Marshal.SizeOf(test)];

    IntPtr buffer = Marshal.AllocHGlobal(data.Length);
    Marshal.StructureToPtr(test, buffer, false);
    Marshal.Copy(buffer, data, 0, data.Length);
    Marshal.FreeHGlobal(buffer);

    foreach (byte b in data)
    {
        Console.Write("{0:X2} ", b);
    }
    Console.WriteLine();
}
Run Code Online (Sandbox Code Playgroud)

我们获得的输出(https://dotnetfiddle.net/gb1wRf)01 00 00 00不是预期的EF BE AD DE.

现在,如果我们将other_field类型更改为byte(例如),我们会得到什么?

奇怪的是,我们首先得到了我们想要的输出,EF BE AD …

c# boolean unmarshalling unions

3
推荐指数
1
解决办法
117
查看次数