在我的本地git树中,我从存储库中的"master"分支提取提交,但是所有开发都在不同的分支中完成,并且也在不同的分支中推送.
我想避免错误并防止在我的本地"master"分支中意外提交,并且只允许pull请求(然后我将开发分支重新设置为更新的master).这可能吗?怎么样?
这是我目前的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,new并other手动,或确保当前分支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) 我可以在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) 随着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,这就是我想要的。
我有一个很大的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) 我想使用子外壳来确保环境更改不会影响循环中的不同迭代,但我不确定我可以在子外壳内使用循环控制语句 ( 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子外壳内部还是应该将其移到外部?作为记录,它可以按原样工作,但也许这是一个不可靠的副作用。
这个示例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>和之间不应该有空格,。我希望它:
不要在没有空格的地方添加空格(即使在块级标签周围,如果它们display:inline在 CSS中设置样式,它们也可能有问题。)
将所有空格折叠在一个空格中,可选的换行除外。
像这样的东西:
<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 解析器可以处理这个问题?
我有一个非常简单的语法。基本上它由块组成,每个块都以一个&名称开头,并向下延伸到下一个或文件末尾。此外,还有两种注释:单行注释,从 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) 我想创建一个特定于另一个类的实例的上下文管理器类。我可以通过调用创建类的方法来实现,但我不确定这是最好、最好的方法:
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) 我有以下情况:
在我的工作计算机(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)中?