我已经赢得了使用Git或Subversion重构/重新创建现有代码库的任务.在这种特殊情况下,存储库历史记录不一定重要.在分析了这种情况之后,我发现了一些确定好布局的问题.我已经阅读了很多博客和帖子,但我仍然不确定什么是最好的布局.
现有存储库包含一组包含文件,一组部分依赖于彼此的库,其中许多依赖于包含文件集.此外,还有两个依赖于库集的应用程序项目.此外,还有一组脚本可以使用其中一个应用程序和一些其他配置信息.我画了一个图表来澄清情况:
+---------->include files
| ^
| |
library A -----> library B <----- library C <----- library D
^ ^ | ^
| | | |
| +--------------------------------+ |
| |
application 1 application 2 --------------------+
^
|
script -----> configuration information
Run Code Online (Sandbox Code Playgroud)
目标是建立一个布局,其中每个组件可以尽可能独立地开发,并且具有一个发布(对于外部客户),其包含定义的标签版本的所有组件的集合,以便可以回溯到时间并为特定版本构建软件.
我想出了以下结构:
trunk/
include/
lib/
library A/
library B/
library C/
library D/
app/
application 1/
application 2/
tags/
1.0/
include/
lib/
library A/
library B/
library C/
library D/
app/
application 1/
application 2/
1.1/
include/ …Run Code Online (Sandbox Code Playgroud) 在为两者构建两个库和测试程序时,我偶然发现了一个看似简单的问题.
问题:我有两个静态库,libA和libB,libB依赖于libA.我不想明确地将使用libB的所有程序链接到libA,我希望SCons看到如果程序链接到库B,它也应该链接到库A.
我已经构建了一个简单的例子来说明这个问题.由于我找不到合适的文件托管服务器并且这与编程有关,因此我创建了一个小型SVN存储库:
svn checkout https://example-repository.googlecode.com/svn/trunk example-repository
Run Code Online (Sandbox Code Playgroud)
或者你可以在这里下载一个tarball .
我刚刚根据这里给出的建议合并了两个存储库.由于两个存储库完全不相关,我使用
hg convert --filemap fm rep1a rep1b
hg convert --filemap fm rep2a rep2b
Run Code Online (Sandbox Code Playgroud)
将存储库1中的文件移动到子目录a,将文件从存储库2移动到子目录b.现在两个存储库中没有冲突的文件,所以我将它们组合在一起.
结果是一个存储库,其中包含两个父项的合并修订,一个包含存储库1的历史记录,另一个包含存储库2的历史记录.很好!
mb--ma--2f--2e--2d--2c--2b--2a
\
-------------------------1e--1d--1c--1b--1a
Run Code Online (Sandbox Code Playgroud)
现在我真正想要的是补丁按时间排序的历史.这没问题,我使用了hg convert --datesort src dst,一切看起来都不错:
mb--ma--2f------2e--2d------2c--2b--2a
\
-----1e----------1d--------------1c--1b--1a
Run Code Online (Sandbox Code Playgroud)
我现在想要的最后一件事是所有补丁都被合并,以便它们具有线性依赖图,有效地消除了合并修订版"ma".我认为解决方案是对一些修订进行修改,但我缺乏理解哪个版本需要重新修改.我试验了一些,但似乎没有像预期的那样工作.一次尝试就产生了一些奇怪的问题:
use (c)hanged version or (d)elete?
Run Code Online (Sandbox Code Playgroud)
我怎么能做最后一步?
编辑:我部分解决了这个问题.由于rebase似乎搞砸了(或者我没有完全理解问题是什么),一个不同的approch似乎工作得更好(正如Lasse所建议的):重写历史.
我所做的是将存储库再次拆分为原始的两个部分,使用hg convert with filemap,直到合并修订版.然后我使用hg移植将一个存储库移植到另一个存储库中.瞧,线性历史!
2f--2e--2d--2c--2b--2a--1e--1d--1c--1b--1a
Run Code Online (Sandbox Code Playgroud)
在此之后,我移植了我在合并之后做的更改集.结果:实际工作副本与具有两个历史时间轴的备份没有差异.到现在为止还挺好!
mb--2f--2e--2d--2c--2b--2a--1e--1d--1c--1b--1a
Run Code Online (Sandbox Code Playgroud)
现在修订版没有按时间排序,这是理想的,所以我尝试了一个hg convert --datesort repository.src repository.sorted,但结果仍然具有相同顺序的变更集,如上所示.如果有人知道如何做到这一点,我可以手工分类.
编辑2:我终于解决了这个问题,我创建了一个新的存储库
mkdir repository_c
cd repository_c
hg init .
Run Code Online (Sandbox Code Playgroud)
我按正确顺序拉入所有补丁,使用hg transplant:
hg transplant --source ../src 0:53
hg transplant --source ../src 70
hg transplant --source ../src 54:55
hg transplant --source …Run Code Online (Sandbox Code Playgroud) 我正在编辑一个Wiki文件,我想在两列之间添加一个新列。
| *No* | *Issue* | *File* | *Status* |
| 1 | blah | foo | open |
| 2 | blah1 | foo1 | close |
Run Code Online (Sandbox Code Playgroud)
现在在第3列和第4列之间,我想插入另一列,如果可以在第四个匹配项中搜索“ |” 给定行中的字符,我可以将其替换为“ | |”。如何使用vim做到这一点?
最终结果将是
| *No* | *Issue* | *File* | | *Status* |
| 1 | blah | foo | | open |
| 2 | blah1 | foo1 | | close |
Run Code Online (Sandbox Code Playgroud) 我有一段代码可以在32位上很好地工作,并且我正在尝试使其也可以在64位上工作。运行该进程时,sizeof(structure)似乎返回了无效的选项,并且该结构未正确填充64位。我需要做什么才能使此功能成为64位?
from ctypes import *
from ctypes.wintypes import *
import sys
# const variable
# Establish rights and basic options needed for all process declartion / iteration
TH32CS_SNAPPROCESS = 2
STANDARD_RIGHTS_REQUIRED = 0x000F0000
SYNCHRONIZE = 0x00100000
PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
TH32CS_SNAPMODULE = 0x00000008
TH32CS_SNAPTHREAD = 0x00000004
#class MODULEENTRY32(Structure):
# _fields_ = [ ( 'dwSize' , DWORD ) ,
# ( 'th32ModuleID' , DWORD ),
# ( 'th32ProcessID' , DWORD ),
# ( 'GlblcntUsage' , DWORD ),
# …Run Code Online (Sandbox Code Playgroud) 我以列表列表的形式收集数据,并将数据写入文本文件.文本文件中的数据看起来像
[[123231,2345,888754],[223467,85645]]
Run Code Online (Sandbox Code Playgroud)
我想把它读回来并存储在我的程序列表中.但是当我read()从文件中创建并尝试创建一个平面列表时,它将所有内容都作为一个字符串,并且解释完全改变,并且我无法查询我在阅读作为python中的正常列表列表后获得的结果.
有人可以帮我阅读文件并以与列表列表相同的格式存储吗?
谢谢!
我想只得到字符串的开头,是否有一个等效的matlab允许说:startsWith('It-is')就像在java中一样?
谢谢
我正在使用Meld来发现两组相似的fortran代码之间的差异。在许多情况下,两个文件之间的唯一区别是自动版本号。这条线看起来似乎有太多应有的差异,并且令人困惑。
有问题的自动版本号行类似于
!! $Id: filename.F90 v#### YYYY-MM-DD HH:MM:SSx username $
Run Code Online (Sandbox Code Playgroud)
是否有可能说服Meld忽略所有看起来像此行的行?我不想让Meld忽略所有评论,因为评论中的某些差异很重要。
我不知道从一开始我将拥有多少个类实例,所以我需要动态创建它们,但我还想保持代码整洁和可读.
我在考虑做这样的事情:
names = ['Jon','Bob','Mary']
class Person():
def __init__(self, name):
self.name = name
people = {}
for name in names:
people[name] = Person(name)
Run Code Online (Sandbox Code Playgroud)
它有效,但我似乎无法找到任何人在网上这样做的例子(虽然我看起来不多).有什么理由我应该避免这样做吗?如果是这样,为什么以及什么是更好的选择呢?
我已经尝试了很长时间了,到目前为止我读过和google的所有帖子都没有帮助我,所以我希望你们其中一个人能给我一个提示:
我有一个由页眉,页脚和内容组成的布局.这个布局在整个页面上高高耸立(这已经花了我一段时间才弄明白).到现在为止还挺好.但现在我想content-div尽可能向下延伸到页脚的开头.无论我做什么,它都不起作用,它或者保持文本的长度,或者它变成整个窗口的大小,隐藏页脚并生成滚动条.我读到了制作它的解决方案position:absolute,但我不希望这样.
这是一个例子:http://jsfiddle.net/N9Gjf/1/
你真的会帮助我!
这是css:
html, body {
height:100%;
text-align:center;
}
#wrapper {
min-height:100%;
height:100%
overflow: hidden;
width:800px;
margin: 0 auto;
text-align: left;
background-color:lightblue;
}
#footer {
background-color: silver;
height:1.5em;
width:800px;
margin: -1.5em auto;
}
#header {
background-color: orange;
height:100px;
}
#content {
background-color: limegreen;
}
* {
margin:0;
padding:0;
}
Run Code Online (Sandbox Code Playgroud)
这是html:
<div id="wrapper">
<div id="header">
<p>Header</p>
</div>
<div id="content">
INHALT
</div>
</div>
<div id="footer">
<p>Footer</p>
</div>
Run Code Online (Sandbox Code Playgroud)