小编jma*_*agh的帖子

如何轻松地将本地Git分支推送到具有不同名称的远程?

我一直想知道是否有一种简单的方法来推送和拉出具有不同名称的远程分支的本地分支,而不必始终指定这两个名称.

例如:

$ git clone myrepo.git
$ git checkout -b newb
$ ...
$ git commit -m "Some change"
$ git push origin newb:remote_branch_name
Run Code Online (Sandbox Code Playgroud)

现在如果有人更新remote_branch_name,我可以:

$ git pull
Run Code Online (Sandbox Code Playgroud)

一切都是合并/快进的.但是,如果我在当地的"newb"中进行更改,我不能:

$ git push
Run Code Online (Sandbox Code Playgroud)

相反,我必须:

% git push origin newb:remote_branch_name
Run Code Online (Sandbox Code Playgroud)

看起来有点傻.如果git-pull用于git-config branch.newb.merge确定从何处拉出,为什么不能git-push有类似的配置选项?有没有一个很好的捷径,或者我应该继续漫长的路?

git version-control git-push git-remote

167
推荐指数
5
解决办法
7万
查看次数

在pika/RabbitMQ中处理长时间运行的任务

我们正在尝试建立一个基本的有向队列系统,其中生产者将生成多个任务,一个或多个消费者将一次获取任务,处理它并确认该消息.

问题是,处理可能需要10-20分钟,而我们当时没有响应消息,导致服务器断开连接.

这是我们的消费者的一些伪代码:

#!/usr/bin/env python
import pika
import time

connection = pika.BlockingConnection(pika.ConnectionParameters(
        host='localhost'))
channel = connection.channel()

channel.queue_declare(queue='task_queue', durable=True)
print ' [*] Waiting for messages. To exit press CTRL+C'

def callback(ch, method, properties, body):
    long_running_task(connection)
    ch.basic_ack(delivery_tag = method.delivery_tag)

channel.basic_qos(prefetch_count=1)
channel.basic_consume(callback,
                      queue='task_queue')

channel.start_consuming()
Run Code Online (Sandbox Code Playgroud)

第一个任务完成后,在BlockingConnection内部的某处抛出异常,抱怨套接字已重置.此外,RabbitMQ日志显示消费者因未及时响应而断开连接(为什么重置连接而不是发送FIN很奇怪,但我们不会担心这一点).

我们搜索了很多,因为我们认为这是RabbitMQ的正常使用案例(有许多长期运行的任务应该在许多消费者中分开),但似乎没有其他人真正有这个问题.最后,我们偶然发现了一个线程,建议使用心跳并long_running_task()在单独的线程中生成心跳.

所以代码变成了:

#!/usr/bin/env python
import pika
import time
import threading

connection = pika.BlockingConnection(pika.ConnectionParameters(
        host='localhost',
        heartbeat_interval=20))
channel = connection.channel()

channel.queue_declare(queue='task_queue', durable=True)
print ' [*] Waiting for messages. To exit press CTRL+C'

def thread_func(ch, method, body):
    long_running_task(connection)
    ch.basic_ack(delivery_tag …
Run Code Online (Sandbox Code Playgroud)

rabbitmq pika

49
推荐指数
5
解决办法
2万
查看次数

如何检查我是否在vimrc中以只读模式(-R)运行

在我的.vimrc,我希望能够检查,如果我一直在运行或者通过vim -Rview.如果是这样,我计划禁用或延迟某些插件加载,以加快我很快想要查看文件的时间.

:args并且argv()似乎只显示我想编辑哪些文件,而不是所有命令行标志.

检查if &readonly几乎工作.如果我有这个:

if &readonly
    echo "read only"
else
    echo "not read only"
endif
Run Code Online (Sandbox Code Playgroud)

接着,我会read only当我执行呼应viewvim -R,但如果我这样做要么view ~/.vimrcvim -R ~/.vimrc然后我得到not read only.很奇怪.

谢谢!

vim

7
推荐指数
2
解决办法
709
查看次数

如何在Pyramid中的SQLAlchemy中跨多个选择维护多表完整性?

我正在尝试构建一个Pyramid应用程序.我从SQLAlchemy脚手架开始.我遇到了一个问题,我想知道解决它的最佳方法是什么.在我的一个视图中,我需要从两个不相关的表中选择很多行.我需要确保在从第一个表中选择行和从第二个表中选择行的时间之间没有插入第二个表的行.

我有三个型号,Node,Test,和Tasking.双方NodesTests有相当多的元数据.给定列表NodesTests列表,Taskings可以创建全局列表.例如,我们可以有三个Nodes,a,b,和c两个Tests"我们需要一个节点都做任务P"和"我们需要两个节点做任务Q".

从这些信息中,Tasks应该创建三个.例如:

  1. "节点a应该做任务P"
  2. "节点b应该做任务Q"
  3. "节点c应该做任务Q"

现在,我正在尝试为此提供REST API.绝大多数时间客户端都会请求列表Tasks,因此需要快速.但是,有时客户端可能会添加一个Node或一个Test.当发生这种情况时,我需要Tasks重新生成整个列表.

这是一个粗略的例子:

@view_config(route_name='list_taskings')
def list_taskings(request):
    return DBSession.Query(Tasking).all()

@view_config(route_name='add_node')
def add_node(request):
    DBSession.add(Node())
    _update_taskings()

@view_config(route_name='add_test')
def add_test(request):
    DBSession.add(Test())
    _update_taskings()

def _update_taskings():
    nodes = …
Run Code Online (Sandbox Code Playgroud)

python transactions sqlalchemy pyramid

2
推荐指数
1
解决办法
393
查看次数