想象一下git项目中的一个类,它经历了1000次提交,一遍又一遍地重新访问.我有没有机会检查何时(在哪个提交中)特定的代码行被引入该类?
如果没有,是否有另一种方法可以找到我特别感兴趣的行集?
TY.
从技术上讲,我在 vim 中使用Tagbar来查看文件的标签,但这个问题应该普遍适用于 exuberant ctags,v5.8。
假设我有以下 python 文件,调用它foo.py:
class foo:
def bar(baz):
print(baz)
Run Code Online (Sandbox Code Playgroud)
让我们运行ctags一下:ctags foo.py。生成的tags文件如下所示:
!_ some ctags version / formatting stuff not worth pasting
bar foo.py /^ def bar(baz):$/;" m class:foo
foo foo.py /^class foo:$/;" c
Run Code Online (Sandbox Code Playgroud)
我感兴趣的是第二行的最后一个字段class:foo。这就是函数的范围bar()。如果我在 vim 中使用 tagbar,它会相应地将函数嵌套在类中。
现在假设我在我的~/.ctags. 事实上,我正在添加对此木偶文件的支持:
class foo {
include bar
}
Run Code Online (Sandbox Code Playgroud)
假设我使用以下~/.ctags参数。“导入”正则表达式很丑陋(呃……对于正则表达式来说很丑陋),但对于这个例子来说它已经完成了足够的工作:
--langdef=puppet
--langmap=puppet:.pp
--regex-puppet=/^class[ \t]*([:a-zA-Z0-9_\-]+)[ \t]*/\1/c,class,classes/
--regex-puppet=/^\ \ \ \ include[ \t]*([:a-zA-Z0-9_\-]+)/\1/i,include,includes/
Run Code Online (Sandbox Code Playgroud)
这会在我的文件中生成以下标记 …
似乎既没有--deep也--shallow没有效果.尝试git-tf checkin --deep在TFS中对新文件夹(当前为空)执行错误时收到错误.我有一个git repo,有很多历史.作为git-tf的一部分,我很乐意保留/迁移到TFS.
我的理解是,checkin --deep每次提交都会在TFS中创建一个类似的变更集.问题是,git repo中的任何提交似乎都是合并的结果(我们在这个repo中有很多合并)似乎使git-tf命令非常不满意并报告我在标题中提到的错误消息(使用[commitid]的异常被替换为实际的提交id(例如9a26d8)).
我不确定我是否完全错过了这里的船或什么.是否有可靠的方法将历史上多次合并提交的预先存在的git repo移植到TFS?我希望这是一个原始的功能/修复.我希望我错过了什么.我对TFS非常不满意,但不像git那样经验丰富,所以对任何帮助表示赞赏.
我正在尝试使用Python的'boto'模块将卷从一个实例复制到另一个实例.该过程的一部分是识别附加到实例的卷.有几种方法可以解决这个问题.例如,我可以使用列表理解:
from boto.ec2 import connect_to_region
conn = connect_to_region('us-east-1')
all_volumes = conn.get_all_volumes()
instance_volumes = [v for v in all_volumes if v.attach_data.instance_id = "<instanceID>"]
Run Code Online (Sandbox Code Playgroud)
这是有效的,并且适用于我的目的.尽管如此,我很好奇,如果有使用方式get_all_volumes()的内置过滤,以获得相同的结果.例如,如果我在搜索"Name"标签与某个模式匹配的实例,我可以这样做:
filters = {'tag:Name': '<name>'}
reservations = self.conn.get_all_instances(filters=filters)
instances = [i for r in reservations for i in r.instances]
Run Code Online (Sandbox Code Playgroud)
get_all_volumes()有一个类似的过滤器参数,但我不能让它工作boto.ec2.volume.Volume.attach_data.instance_id.我是否遗漏了一些明显的东西,或者是因为不可能的卷而被instance_id过滤?
我找到了一些与dependency_links相关的答案,但不幸的是它们还没有为我工作。我正在写一个 python 模块。它存储在私有 pypi 存储库中,并依赖于存储在同一私有存储库和公共 pypi 存储库中的一些依赖项:
setup(
# some other setup
name = 'mymodule',
install_requires = [
'kazoo',
'privateDependencyA',
'privateDependencyB'
],
dependency_links = [
"http://my.private.repo/eggs/#privateDependencyA",
"http://my.private.repo/eggs/#privateDependencyB"
])
Run Code Online (Sandbox Code Playgroud)
我存储mymodule在我的私人存储库中,因此我尝试安装它:
pip install -i http://my.private.repo/eggs/ mymodule
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但找不到kazoo,这是一个公共图书馆。因此我尝试使用该-f标志:
$ pip install -i http://my.private.repo/eggs/ -f http://pypi.python.org/ mymodule
Downloading/unpacking mymodule
Downloading mymoudle-<version>.tar.gz (unknown size): 3.1kB downloaded
Running setup.py egg_info for package mymodule
Downloading/unpacking kazoo (from mymodule)
Could not find any downloads that satisfy the requirement …Run Code Online (Sandbox Code Playgroud) 我有以下.gitconfig:
[user]
name = name
email = email@email.com
custom_field = AAA
Run Code Online (Sandbox Code Playgroud)
使用 git 的内置命令可以轻松获取姓名和电子邮件。
如何获取 custom_field 的值?
我正在使用python3.3。2.x的pickle协议中可能不存在此问题,但我尚未进行实际验证。
假设我创建了一个dict子类,该子类在每次更新键时都会计数。像这样:
class Foo(dict):
def __init__(self):
self.counter = 0
def __setitem__(self, key, value):
print(key, value, self.__dict__)
if key == 'bar':
self.counter += 1
super(Foo, self).__setitem__(key, value)
Run Code Online (Sandbox Code Playgroud)
您可以这样使用它:
>>> f = Foo()
>>> assert f.counter == 0
>>> f['bar'] = 'baz'
... logging output...
>>> assert f.counter == 1
Run Code Online (Sandbox Code Playgroud)
现在让我们腌制和腌制:
>>> import pickle
>>> f_str = pickle.dumps(f)
>>> f_new = pickle.loads(f_str)
bar baz {}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "test.py", line 133, …Run Code Online (Sandbox Code Playgroud) 我目前的分支看起来像:
D
/
H--A--B--C
Run Code Online (Sandbox Code Playgroud)
我试图找出如何生成一个新的git分支,这将使新的git repo看起来像:
D
/
H--A--B--C
\
C
Run Code Online (Sandbox Code Playgroud)
这可能吗?我想过使用重置,但这意味着C的变化也会丢失,所以寻找替代方案.
git ×4
python ×2
boto ×1
branch ×1
ctags ×1
git-revert ×1
git-tf ×1
pickle ×1
pip ×1
pypi ×1
python-3.3 ×1
python-3.x ×1
repository ×1
tagbar ×1
tfs ×1
tfs2012 ×1