小编Jel*_*lby的帖子

防止在本地分支中提交

在我的本地git树中,我从存储库中的"master"分支提取提交,但是所有开发都在不同的分支中完成,并且也在不同的分支中推送.

我想避免错误并防止在我的本地"master"分支中意外提交,并且只允许pull请求(然后我将开发分支重新设置为更新的master).这可能吗?怎么样?

git version-control dvcs

17
推荐指数
1
解决办法
3020
查看次数

重新绑定树(提交/分支及其所有子项)

这是我目前的git树:

A - H (master)
|
\- B - C - D - E (feature)
           |
           \- F (new)
           |
           \- G (other)
Run Code Online (Sandbox Code Playgroud)

而且我想重新设计侧支,这取决于H而不是A:

A - H (master)
    |
    \- B'- C'- D'- E'(feature)
               |
               \- F'(new)
               |
               \- G'(other)
Run Code Online (Sandbox Code Playgroud)

看似简单的概念,很难自动完成.这已经在这里这里被问,但是提议的解决方案对我不起作用.

首先,正如前面所指出的那样,git branch当前分支存在时,输出并不容易解析(有一个*前置).但这不是一个塞子,在我的情况下,我可以轻松提供名称feature,newother手动,或确保当前分支master.

然后我尝试了这些命令:

git rebase --committer-date-is-author-date --preserve-merges --onto master feature^ feature
git rebase --committer-date-is-author-date --preserve-merges --onto master …
Run Code Online (Sandbox Code Playgroud)

git

16
推荐指数
2
解决办法
4312
查看次数

如何将环境变量导出到docker镜像?

我可以在Dockerfile中定义"静态"环境变量ENV,但是可以在构建时将一些值传递给这个变量吗?我正在尝试这样的东西,这不起作用:

FROM phusion/baseimage

RUN mkdir -p /foo/2016/bin && \
    FOOPATH=`ls -d /foo/20*/bin` && \
    export FOOPATH

ENV PATH $PATH:$FOOPATH
Run Code Online (Sandbox Code Playgroud)

当然,在实际用例中,我将运行/解压缩创建一个名称将随不同版本,日期等更改的目录,并且我希望每次目录名称更改时都避免修改Dockerfile.


编辑:由于它似乎不可能,到目前为止最好的解决方法是使用符号链接:

FROM phusion/baseimage

RUN mkdir -p /foo/2016/bin && \
    FOOPATH=`ls -d /foo/20*/bin` && \
    ln -s $FOOPATH /mypath

ENV PATH $PATH:/mypath
Run Code Online (Sandbox Code Playgroud)

docker

9
推荐指数
1
解决办法
8718
查看次数

如何像bash一样在python中扩展环境变量?

随着os.path.expandvars我可以扩大环境变量中的字符串,但需要提醒的:“格式不正确的变量名称和引用不存在的变量保持不变”(重点煤矿)。此外,os.path.expandvars扩展也逃脱\$了。

我想以类似 bash 的方式扩展变量,至少在这两点上是这样。相比:

import os.environ
import os.path
os.environ['MyVar'] = 'my_var'
if 'unknown' in os.environ:
  del os.environ['unknown']
print(os.path.expandvars("$MyVar$unknown\$MyVar"))
Run Code Online (Sandbox Code Playgroud)

这给出my_var$unknown\my_var了:

unset unknown
MyVar=my_var
echo $MyVar$unknown\$MyVar
Run Code Online (Sandbox Code Playgroud)

这给出了my_var$MyVar,这就是我想要的。

python environment-variables

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

CMake:Fortran模块和编译顺序

我有一个很大的Fortran程序,其中包含许多目录。每个目录都在伪库中单独编译,但是仍然存在相互依赖的混乱,因此最后,所有伪库都组合在一个可用的库中。我想使用Fortran模块,但是它非常脆弱,因为我不能依赖自动依赖项检查,并且编译可能会因顺序而失败。

例如,考虑以下CMakeLists.txt文件:

project (test Fortran)
add_library (lib1 dir1/lib1.f90)
add_library (lib2 dir2/lib2.f90 dir2/mod.f90)
add_executable (exe dir3/exe.f90)
target_link_libraries (exe lib1 lib2)
Run Code Online (Sandbox Code Playgroud)

资料来源:

dir1/lib1.f90

subroutine bar
use foo, only: foofoo
implicit none
write(6,*) foofoo
end subroutine bar
Run Code Online (Sandbox Code Playgroud)

dir2/lib2.f90

subroutine bar2
use foo, only: foofoo
implicit none
write(6,*) foofoo,' again'
end subroutine bar2
Run Code Online (Sandbox Code Playgroud)

dir2/mod.f90

module foo
implicit none
integer :: foofoo=3
end module foo
Run Code Online (Sandbox Code Playgroud)

dir3/exe.f90

program meh
implicit none
call bar()
call bar2()
end program meh
Run Code Online (Sandbox Code Playgroud)

从头开始编译失败:

$ …
Run Code Online (Sandbox Code Playgroud)

fortran cmake

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

子shell中的循环控制

我想使用子外壳来确保环境更改不会影响循环中的不同迭代,但我不确定我可以在子外壳内使用循环控制语句 ( break, continue):

#!/bin/sh
export A=0
for i in 1 2 3; do
  (
  export A=$i
  if [ $i -eq 2 ]; then continue ; fi
  echo $i
  )
done
echo $A
Run Code Online (Sandbox Code Playgroud)

A循环外的值不受内部发生的任何影响,这没关系。但是允许使用continue子外壳内部还是应该将其移到外部?作为记录,它可以按原样工作,但也许这是一个不可靠的副作用。

bash dash-shell

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

BeautifulSoup:不要在重要的地方添加空格,在不重要的地方删除它们

这个示例python程序:

document='''<p>This is <i>something</i>, it happens
               in <b>real</b> life</p>'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(document)
print(soup.prettify())
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

<html>
 <body>
  <p>
   This is
   <i>
    something
   </i>
   , it happens
               in
   <b>
    real
   </b>
   life
  </p>
 </body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是错误的,因为它在每个开始和结束标记之前和之后添加了空格,例如,</i>和之间不应该有空格,。我希望它:

  1. 不要在没有空格的地方添加空格(即使在块级标签周围,如果它们display:inline在 CSS中设置样式,它们也可能有问题。)

  2. 将所有空格折叠在一个空格中,可选的换行除外。

像这样的东西:

<html>
 <body>
  <p>This is
   <i>something</i>,
   it happens in
   <b>real</b> life</p>
 </body>
</html>
Run Code Online (Sandbox Code Playgroud)

这可能BeautifulSoup吗?任何其他推荐的 HTML 解析器可以处理这个问题?

html python beautifulsoup

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

pyparsing 中的注释

我有一个非常简单的语法。基本上它由块组成,每个块都以一个&名称开头,并向下延伸到下一个或文件末尾。此外,还有两种注释:单行注释,从 a*到行尾,以及 C 风格的注释,包含在/* */. 注释也可以在块内。到目前为止我的尝试:

#!/usr/bin/env python
from pyparsing import *

NL = Suppress( LineEnd() )
restOfLineNL = restOfLine + NL

LineComment = Literal('*') + restOfLineNL
BlockComment = nestedExpr('/*', '*/')
Comment = BlockComment | LineComment

ModuleName = LineStart() + Word( '&', alphanums + '_', min=2 ) + NL
Module = ModuleName + SkipTo( StringEnd() | ModuleName, include=False)
Grammar = ZeroOrMore( Module )
Grammar.ignore(Comment)

result = Grammar.parseString('''
&keyword1

*comment

&keyword2
arbitrary lines
* with …
Run Code Online (Sandbox Code Playgroud)

python pyparsing

5
推荐指数
0
解决办法
1247
查看次数

类实例中的上下文管理器

我想创建一个特定于另一个类的实例的上下文管理器类。我可以通过调用创建类的方法来实现,但我不确定这是最好、最好的方法:

class MyClass(object):
    def __init__(self):
        self.level = 0
        self.Nest = self.create_context_manager()
    def inclev(self):
        self.level += 1
    def declev(self):
        self.level -= 1

    def create_context_manager(self):
        self2 = self
        class Nest(object):
            def __init__(self):
                pass
            def __enter__(self):
                self2.inclev()
            def __exit__(self, exc_type, exc_value, traceback):
                self2.declev()
        return Nest

# Manually increase/decrease level
my_instance = MyClass()
print(my_instance.level)
my_instance.inclev()
print(my_instance.level)
my_instance.inclev()
print(my_instance.level)
my_instance.declev()
print(my_instance.level)
my_instance.declev()
print(my_instance.level)

# Use instance-specific context manager
other_instance = MyClass()
print(other_instance.level)
with other_instance.Nest():
    print(other_instance.level)
    with other_instance.Nest():
        print(other_instance.level)
    print(other_instance.level)
print(other_instance.level)
Run Code Online (Sandbox Code Playgroud)

python

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

使用ssh和byobu更新DISPLAY

我有以下情况:

在我的工作计算机(A)中,打开一个byobu(tmux)会话。

在byobu内,我打开了几个终端。其中一些是(A)本地的,而其他一些是我连接到另一台计算机(B)的。

我回到家,从我的家用计算机(C)切换到(A),运行“ byobu”,然后在(A)或(B)中找到我的所有会话。

除运行X11应用程序外,这非常有效。更换计算机时,我不会让任何X11应用程序运行,但是仅运行“ xclock”有时会起作用,有时却无法(“无法连接到X服务器本地主机:n .0”)。

我知道这取决于DISPLAY变量,并且将其设置为X11将连接到我上次运行“ byobu”的计算机,然后再在byobu内创建会话,该计算机可以是(A)或(C)。我的问题是,我通常不知道该如何解决不再起作用的会话。有时,我可以打开另一个会话(byobu中的另一个选项卡)并$DISPLAY在其他会话中使用的值,但这仅在新会话打开的情况下有效,而并非总是如此。在其他情况下,我能够分离byobu(F6),重新连接它(运行“ byobu”),并打开与(B)的新ssh连接,然后该连接可以工作,但不能运行现有的会话。

我已经阅读了一些文档,例如SSH,X11转发和终端多路复用器,或者如何使tmux X显示返回?,但我不清楚它们如何应用于(如果适用)我的情况。例如,.bashrc前者的代码是在(A​​),(B)还是(C)中?

x11 ssh tmux byobu

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