使用git作为部署管理工具进行管理的工具

git_deplo的Python项目详细描述


git deploy是一种管理工具,它使用git作为python中实现的部署管理工具,并使用dulwich[1]
项目来实现python中的本机git功能。


git deploy实现部署系统的前端,而hook为用户提供较低级别的灵活性
部署的详细信息。此客户端使用git来管理存储库和部署的状态,并假设在同步时,钩子确保目标与客户端一致(参见default.sync)。用户可以自由添加自己的部署流和环境选项(参见下面的示例)。

[1]https://github.com/jelmer/dulwich


usage
----


basic usage包括将远程工作repo克隆到部署目标和所有客户端节点。当
客户端准备部署时,调用"start"以获取远程锁,调用"sync"将更改推送到目标。完成后,锁将被移除。

若要开始新部署,请导航到工作回购,发出"start"命令:

$git deploy start[opts]


此时,您可以自由提交项目,并在准备好部署时发出"sync"命令-如果您的工作已经完成,则只需"sync",但请确保重新设置本地克隆:

$git deploy sync[opts]

进程可以在任何时候使用"abort"命令中止:


$git deploy abort[opts]


>您可以使用revert调用回滚到标记:

$git deploy revert[-t<;tag\u name>;][选项]

如果未提供标记,则回滚将使用最新的标记。默认情况下,只在本地提交回滚
但是,通过为自动同步提供"-a"选项,回滚也会自动同步:

$git deploy revert[-t<;tag_name>;][opts]



setup
----

为单个客户端和目标配置和使用。对于这个
示例,客户机主机和目标主机分别称为*client.realm.org*和*target.realm.org*。
我们示例项目的客户机和目标上的主路径分别是*/home/me/project/*和*/var/www/html/sample.com/*
。假定git remote是为您的项目配置的,在本例中,远程别名是
*origin*,远程分支是*master*



**客户端设置**


>客户端是可以启动部署的任何工作计算机。在*client.realm.org*clone git deploy上,本地安装,配置设置并初始化:

$git clone git@github.com:git tools/git deploy.git



$cd git deploy
$sudo pip install-e。




*脚本/git deploy.ini*:

[deploy]
target=target.realm.org
path=/home/me/project/
user=me
hook dir=.git/deploy/hooks/
tag prefix=sample.com
remote=origin
branch=master
客户端路径=/home/me/project/
密钥路径=/home/me/.ssh/id_rsa
测试repo路径=/tmp/test_repo/
[系统]
在*git deploy.ini*中定义设置后,请运行/usr/bin/

./scripts/init-gd



**target setup**


on*target.realm.org*不需要克隆和安装git deploy,但这里需要创建部署挂钩。*git deploy/default hooks/default target pull.py*中有一个默认的钩子,应该复制到
*target.realm.org:/var/www/html/sample.com/.git/deploy/hooks/*。这是一个基本的钩子,它将在同步时从客户端实例中拉取
推送的更改。




**使用git deploy**


首先在客户端初始化新存储库:

$mkdir me.com
$cd me.com
$git init
$git remote add origin git@github.com:wikimedia/me.com.git
$git push origin master

*配置中的路径*已存在,并配置为项目的Git回购。

*start*&;*sync*:

通过发出Git拉取或回退,确保客户端正确同步到远程。然后,您可以发出
启动命令,将锁定文件写入目标以开始部署。


$cd me.com
$touch new_file
$git add new_file
$git commit-m"add-my new file"
$git pull--rebase origin master

准备进入部署过程:


<;执行任何测试或根据需要添加任何其他提交此时已锁定远程服务器>;

client.realm.org:me.com me$git deploy sync

如果使用了默认的push和pull钩子,客户机只需将其更改推送到远程,目标机就会拉入新的更改。部署标记的格式为
*<;repo>;-sync-<;date>;-<;time>;*。


最后,您还可以在同步上执行干运行:

$git deploy sync-d

*abort*

例如,请考虑以下情况:

$git deploy start
$git commit bad\u change-m"add-some buggy code."

突然,您发现您的更改在进入deloy进程后引入了一个错误。与其同步错误的
代码,然后回滚(下一节),不如直接中止部署:

$git deploy abort
$git reset--soft head^

…继续本地更改…

现在您已经将deploy发布到其他客户端,而不会用错误代码感染代码库。



*rollback*

>如果意外部署了一些需要回滚的代码,*revert*命令在这里非常有用。您可以使用deploy标记回滚到以前的部署状态。要查看旧标记,请执行以下操作:


$git tag


now to rollback to a previous deploy call*git revert*with the appropriate tag:

$git deploy start
$git deploy revert<;tag>;


deploy hooks
----


此行为与https://github.com/git deploy/git deploy hooks&;
https://github.com/git deploy/git deploy编写部署挂钩。


挂钩系统可用于在部署过程中执行用户定义的操作。



**编写挂钩**


此系统基于同步模型,其中同步是部署目标的过程与呼叫客户机一致。有两个阶段定义部署前后的行为,即预/后同步。

预部署框架预计位于$git_work_dir/deploy目录中(即正在推出的
存储库的部署目录)。此目录具有以下树:

$git_work_dir/deploy/deploy directory
/apps/directory per application+"common"
/common/部署应用于所有应用程序的脚本
/$app/为特定的$app部署脚本
/sync/sync
/$app.sync


deploy/{apps,sync}/$app中的$app是您在rollout标记中看到的服务器前缀。例如,一家公司可能有他们推出的环境,例如"绵羊"、"奶牛"和"山羊"。下面是一个可以在sheep环境中使用的
部署挂钩的实际示例:

$tree deploy/apps/{sheep,公共}/deploy/sync/
deploy/apps/sheep/
|--pre-sync.021_take_us_of_the_load_balancer.pl
`——pre-sync.022_check_we_are_not_in_the_load_balancer.pl->;pre-pull.020_check_we_in_the_load_balancer.pl
deploy/apps/common/
——pre-sync.001_setup_affiliate_symlink.pl
`——pre-sync.002_check_permissions.pl
deploy/sync/
——sheep.sync

git deploy将执行它们(例如,在同步之前进行预同步)。

在这些阶段,git deploy将在所有deploy/apps/{common,$app}/$phase.*钩子中进行全局搜索,并按顺序执行它们,首先是公共钩子,然后是$app-specific钩子。注意,钩子必须设置其可执行位。



**调用环境**


要调用基于环境的部署,请使用-e选项:


$git deploy sync-e$env



deploy logging
--


${deploy_root}/logs/git-deploy.log(archive)
${deploy_root}/logs/git-deploy-active.log(active)

active日志存储当前任何活动部署的日志,并在完成部署时刷新附加到存档日志中。在git deploy中,当前没有在目标上实现默认的日志轮换
,因此如果需要,必须手动添加日志轮换。




examples
--


**returning to a tag**

此示例演示如何将部署回滚到较早的标记。

in客户端存储库检查git历史记录的目录:

richrushbay lm:test_sartoris rfaulk$git log

commit 779a07774dd5a7baf8dc86657cbfc491264ff970
author:rfaulk<;rfaulk@yahoo-inc.com>;
日期:2013年12月8日星期日23:28:50-0800

测试


commit 1ab80a78fc1e89ae6f8872282f96f5f42677b843
作者:rfaulk<;rfaulk@yahoo-inc.com>;
日期:2013年11月16日星期六18:31:26-0800

test git deploy 20131116_12311863e111a266c4c513da45a39ed3e8cdd5
作者:rfaulk<;rfaulk@yahoo-inc.com>;
日期:2013年11月2日星期六19:42:58-0700


查看现有的同步标记:

richrushbay lm:test_sartoris rfaulk$git tag

sartoris-sync-20131220-000105
sartoris-sync-20131220-012354
sartoris-sync-20131220-013503

让我们开始部署:

richrushbay lm:test_sartoris rfaulk$git deploy start

dec-20 01:53:00调试git deploy已准备好运行
dec-20 01:53:00 info git deploy.git deploy::config-{deploy.test_repo':'/tmp/test/','deploy.key_path':'/users/rfaulk/.ssh/id_rsa','target':'stat1.wikimedia.org',,"顶级目录":"/users/rfaulk/projects/test戋sartoris","user.name":"rfaulk","user.email":"rfaulk@yahoo-inc.com","deploy.remote戋url":"git@github.com:rfaulkner/test戋sartoris.git","hook戋dir":".git/deploy/hooks/","客户端路径":"/users/rfaulk/projects/test戋sartoris/",'同步目录':'.git/deploy/hooks//sync','path':'/home/rfaulk/test'sartoris/','repo'name':'sartoris','deploy'u file':'/users/rfaulk/projects/test'sartoris/.git/.deploy','user':'rfaulk'}
12月20日01:53:00信息git'u deploy.git'u deploy::在stat1.wikimedia.org检查锁定文件。
12月20日01:53:01 info git_deploy.git_deploy::不存在锁定文件。
12月20日01:53:01 info git_deploy.git_deploy::ssh lock create。

但在本例中,不是这样,回滚应用于前一个sync标记:


richrushbay lm:test_sartoris rfaulk$git deploy revert


dec-20 01:53:13 debug git deploy已准备好运行
dec-20 01:53:13 info git deploy.git deploy::config-{'deploy.test悻repo':'/tmp/test/','deploy.key悻path':'/users/rfaulk/.ssh/id悻rsa','target':'stat1.wikimedia.org','top悻dir':'/users/rfaulk/projects/test悻sartoris','user.name':'rfaulk','user.email':'rfaulk@yahoo-inc.com','deploy.remote悻url':'git@github.com:rfaulkner/"hook-dir":".git/deploy/hooks/","client-路径":"/users/rfaulk/projects/test-sartoris/","sync-dir":".git/deploy/hooks//sync","路径":"/home/rfaulk/test-sartoris/","repo-name":"sartoris","deploy-file":"/users/rfaulk/projects/test-sartoris/.git/.deploy",'user':'rfaulk'}
dec-20 01:53:13 info git撸u deploy.git撸u deploy::检查stat1.wikimedia.org上的锁文件。
dec-20 01:53:15 info git撸u deploy.git撸u deploy::rfaulk具有锁。
dec-20 01:53:15 info git撸u deploy.git撸u deploy::revert-使用:"sartoris-sync-20131220-012354"
12月20日01:53:15 info git_deploy.git_deploy::revert->;尝试还原为标记:"sartoris-sync-20131220-012354"
12月20日01:53:15 info git_deploy.git_deploy::revert->;还原为标记:"sartoris-sync-20131220-012354",调用"git deploy sync"以保持

,并同步更改:



dec-20 01:53:49 debug git deploy已准备好运行
dec-20 01:53:49 info git廑deploy.git廑deploy::config-{deploy.test廑repo':'/tmp/test/',"deploy.key_path":"/users/rfaulk/.ssh/id_rsa","target":"stat1.wikimedia.org","top_dir":"/users/rfaulk/projects/test_sartoris","user.name":"rfaulk","user.email":"rfaulk@yahoo-inc.com","deploy.remote_url":"git@github.com:rfaulkner/test_sartoris.git","hook_dir":".git/deploy/hooks/",'客户端路径':'/users/rfaulk/projects/test戋sartoris/','同步目录':'.git/deploy/hooks//sync','路径':'/home/rfaulk/test戋sartoris/','回购名称':'sartoris','部署文件':'/users/rfaulk/projects/test戋sartoris/.git/.deploy','用户':'rfaulk}
12月20日01:53:49信息git戋deploy.git戋deploy:正在stat1.wikimedia.org上检查锁定文件。
dec-20 01:53:51 info git_deploy.git_deploy::rfaulk已锁定。
dec-20 01:53:51 info git_deploy.git_deploy::sync-标记本地
dec-20 01:53:51 info git_deploy.git_deploy::sync-调用默认同步。
12月20日01:53:51 info git_deploy.drivers.driver::调用默认同步-推送更改…
12月20日01:53:53 info push->;
12月20日01:53:53 info git_deploy.drivers.driver::调用默认同步-拉入目标
12月20日01:53:56 info pull->;更新779a077..38f42d3;快进
dec-20 01:53:56 info git_deploy.git_deploy::在stat1.wikimedia.org检查锁文件。
dec-20 01:53:57 info git_deploy.git_deploy::rfaulk有锁。
dec-20 01:53:57 info git_deploy.git_deploy::ssh lock destroy。

git历史记录,您应该看到一个回滚提交。这将持久化到远程回购和目标主机:

richrushbay lm:test_sartoris rfaulk$git log

commit 38f42d3be6831c16b475786f316bcc58499e56
author:rfaulk<;rfaulk@yahoo-inc.com>;
日期:2013年12月20日星期五09:53:15+0000

提交1ab80a78fc1e89ae6f88722f96f5f42677b843
author:rfaulk<;rfaulk@yahoo-inc.com>;
日期:2013年11月16日星期六18:31:26-0800


test git deploy 20131116\u.file.


commit 12311863e111a266c4c513da45a39ed3e8cdd5
作者:rfaulk<;rfaulk@yahoo-inc.com>;
日期:2013年11月2日星期六19:42:58-0700


初始提交。

注意回滚的新同步标记:

richrushbay lm:test_sartoris rfaulk$git tag

sartoris-sync-20131220-000105
sartoris-sync-20131220-012354
sartoris-sync-20131220-013503
sartoris-sync-20131220-015351


**默认值**



在本例中,我们有以下部署树:


$tree deploy/apps/{prod,common}/deploy/sync/
deploy/apps/prod/
deploy/apps/common/
——pre sync.010_test.sh
——post sync.010_test.sh
deploy/sync/
——prod.sync
——default.sync

1月14日23:19:26 info git_deploy.lockers.locker::正在stat1.wikimedia.org检查锁文件。
1月14日23:19:27 info git_deploy.lockers.locker::不存在锁文件。
1月14日23:19:27 info git_deploy.lockers.locker::正在创建锁文件stat1.wikimedia.org:/home/rfaulk/test_sartoris/.git/deploy//lock rfaulk.lock.


$git deploy sync-d

1月14日23:19:32 info git_deploy.lockers.locker::在stat1.wikimedia.org检查锁文件。
1月14日23:19:34 info git_deploy.lockers.locker::rfaulk has锁定。
1月14日23:19:34 info git_deploy.git_deploy::sync->;dryrun。
1月14日23:19:34 info git_deploy.drivers.driver::dryrun sync
1月14日23:19:34 info-->;标记"sartoris-sync-20140114-231934"
1月14日23:19:34 info-->;作者rfaulk<;rfaulk@yahoo-inc.com>;'
1月14日23:19:34信息-->;远程"来源"
1月14日23:19:34信息-->;分支"master"
1月14日23:19:34按执行顺序转储部署脚本的信息。
1月14日23:19:34 info git_deploy.drivers.driver::调用预同步公用:"/users/rfaulk/projects/test_sartoris//.git/deploy/apps/common"…
1月14日23:19:34 infogit_deploy.drivers.driver::调用"/users/rfaulk/projects/test_sartoris//.git/deploy/apps/common/pre-sync.010_test.sh"on phase"pre-sync"

/bin/bash
echo"common pre-sync"

1月14日23:19:34 info git_deploy.drivers.driver::调用pre-sync应用:"/users/rfaulk/projects/test_sartoris//.git/deploy/apps/"..
1月14日23:19:34 info git_deploy.drivers::调用pre-sync应用:"/users/rfaulk/projects/test_sartoris//.git/deploy/sync"…
1月14日23:19:34 info git_deploy.drivers.driver::调用"/users/rfaulk/projects/test_sartoris//.git/deploy/sync/default.sync‘on phase’default"

!!/usr/bin/python
-*-编码:utf-8-*-

"


>从客户端执行推送的默认同步脚本。预期的操作如下:


cd$git_deploy_home
/usr/bin/git push origin master
/usr/bin/git push——标记


"


import sys
import logging

from git_deploy.git_deploy从git_deploy导入gitmethods
。utils导入ssh_command_target


log_format=%(asctime)s%(levelname)-8s%(message)s"
handler=logging.streamhandler(sys.stderr)
handler.setformatter(logging.formatter(fmt=log_format,
日期fmt='%b-%d%h:%m:%s'))




#dulwich push
remote=gitmethods().config['deploy.remote戋url']
logging.info(戋name戋u+'::默认同步,推送到{0}'.format(
remote))
gitmethods()。戋dulwich push(remote,"master")

git-pull-on-remote
target-path=gitmethods().config['path']
cmd="git--git-dir={.0}/.git--work tree={.0}pull origin-master"。format(
target-path)
target=gitmethods().config['target']
user=gitmethods().config['user.name']
key_path=gitmethods().config['deploy.key_path']

logging.info(u name_uu+'::默认同步,将"
"更改为"{0}"。格式(目标))
ssh\u命令目标(命令、目标、用户,密钥路径)



def cli():
sys.exit(main())


if"uu name_uuuuuuuu main_uuu":"pragma:nocover
cli()

1月14日23:19:34 info git_u deploy.drivers::调用后同步应用程序:"/users/rfaulk/projects/test_sartoris//.git/deploy/apps/"…
1月14日23:19:34 info git_deploy.drivers.driver::调用post sync app:"/users/rfaulk/projects/test_sartoris//.git/deploy/apps/common"…
1月14日23:19:34 info git_deploy.drivers::调用'/users/rfaulk/projects/test_sartoris/.git/deploy/apps/common/post sync.010_test.sh'处于"后同步"阶段

/bin/bash
echo"common post sync"

1月14日23:19:34 info git_deploy.drivers.driver::dryrun sync complete



**dryrun并同步到环境**


在本例中,我们有一组虚拟挂钩:

$tree deploy/apps/{prod,公共}/deploy/sync/
deploy/apps/prod/
deploy/sync/
——prod.sync
——default.sync

事实上,如果您愿意,您可以设置单独的环境作为不同的阶段本身。注意,
在指定环境时,将忽略default.sync。无需进一步说明:

$git deploy start

1月14日00:11:17 info git_deploy.lockers.locker::在stat1.wikimedia.org检查锁文件。
1月14日00:11:18 info git_deploy.lockers.locker::不存在锁文件。
1月14日00:11:18 infogit_deploy.lockers.locker::在stat1.wikimedia.org/home/rfaulk/test_sartoris/.git/deploy/lock rfaulk.lock创建锁文件。


执行dryrun:

$git deploy sync-d-e prod

1月14日23:06:31 info git_deploy.lockers.locker::检查锁定文件stat1.wikimedia.org.
1月14日23:06:32 info git_deploy.lockers.locker::rfaulk已锁定。
1月14日23:06:32 info git_deploy.git_deploy::sync->;dryrun.
1月14日23:06:32 info git_deploy.drivers.driver::dryrun sync
1月14日23:06:32 info-->;标记"sartoris-sync-20140114-230632"
1月14日23:06:32信息-->;作者"rfaulk<;rfaulk@yahoo-inc.com>;"
1月14日23:06:32信息-->;远程"原点"
1月14日23:06:32信息-->;分支"master"
1月14日23:06:32按执行顺序转储部署脚本信息。
1月14日23:06:32 info git_deploy.drivers.driver::调用预同步公用:"/users/rfaulk/projects/test_sartoris//.git/deploy/apps/common"…
1月14日23:06:32 infogit_deploy.drivers.driver::调用"/users/rfaulk/projects/test_sartoris//.git/deploy/apps/common/pre-sync.010_test.sh"on phase"pre-sync"

/Bin/bash
echo"common pre-sync"

1月14日23:06:32 info git_deploy.drivers.driver::调用pre-sync app:"/users/rfaulk/projects/test_sartoris//.git/deploy/apps/prod"…
1月14日23:06:32 info git_deploy.drivers.driver::调用'/users/rfaulk/projects/test_sartoris/.git/deploy/apps/prod/pre-sync.010_test.sh'处于"预同步"阶段

/bin/bash
echo"prod pre sync 1"

1月14日23:06:32 info git_deploy.drivers.driver::调用"/users/rfaulk/projects/test_sartoris//.git/deploy/apps/prod/pre sync.020_test.sh"on phase"pre sync"

!!/bin/bash
echo"prodn pre sync 2"

1月14日23:06:32 info git_deploy.drivers.driver::调用pre sync app:"/users/rfaulk/projects/test_sartoris//.git/deploy/sync"…
1月14日23:06:32 info git_deploy.drivers::调用'/users/rfaulk/projects/test_sartoris//.git/deploy/sync/prod.sync'在"prod"阶段

/bin/bash
echo prod.sync

1月14日23:06:32 info git_deploy.drivers.driver::调用post sync app:"/users/rfaulk/projects/test_sartoris//.git/deploy/apps/prod"…
1月14日23:06:32 info git_deploy.drivers.driver::调用'/users/rfaulk/projects/test_sartoris/.git/deploy/apps/prod/post sync.010_test.sh'处于"后同步"阶段

/bin/bash
echo"prod post sync 1"

1月14日23:06:32 info git_deploy.drivers.driver::调用"/users/rfaulk/projects/test_sartoris//.git/deploy/apps/prod/post sync.020_test.sh"on phase"post sync"

!!/bin/bash
echo"prod post sync 2"

1月14日23:06:32 info git_deploy.drivers.driver::调用post sync app:"/users/rfaulk/projects/test_sartoris//.git/deploy/apps/common"…
1月14日23:06:32 info git_deploy.drivers::调用'/users/rfaulk/projects/test_sartoris/.git/deploy/apps/common/post sync.010_test.sh'处于"后同步"阶段

/bin/bash
echo"common post sync"

1月14日23:06:32 info git_deploy.drivers.driver::dryrun sync complete

让我们执行虚拟同步:

$git deploy sync-e prod

1月14日23:07:38 info git_deploy.locker s.locker::在stat1.wikimedia.org检查锁文件。
1月14日23:07:40 info git_deploy.lockers.locker::rfaulk有锁。
1月14日23:07:40 infogit_deploy.git_deploy::sync-调用默认同步。
1月14日23:07:40 info git_deploy.drivers.driver::调用预同步公用:"/users/rfaulk/projects/test_sartoris//.git/deploy/apps/common"…
1月14日23:07:40 info git_deploy.drivers.driver::调用'/users/rfaulk/projects/test_sartoris//.git/deploy/apps/common/pre-sync.010_test.sh'处于"预同步"阶段
1月14日23:07:40 info/users/rfaulk/projects/test_sartoris//.git/deploy/apps/common/pre-sync.010_test.sh out->;公共预同步

1月14日23:07:40 info git_deploy.drivers.driver::调用预同步应用:"/users/rfaulk/projects/test_sartoris/.git/deploy/apps/prod"…
1月14日23:07:40 info git_deploy.drivers.driver::调用'/users/rfaulk/projects/test_sartoris//.git/deploy/apps/prod/pre-sync.010_test.sh'在"预同步"阶段
1月14日23:07:40 info/users/rfaulk/projects/test_sartoris//.git/deploy/apps/prod/pre-sync.010_test.sh out->;prod pre-sync 1

1月14日23:07:40 info git_deploy.drivers.driver::正在调用"/users/rfaulk/projects/test_sartoris//.git/deploy/apps/prod/pre-sync.020_test.sh"on phase"pre-sync"
1月14日23:07:40 info/用户/rfaulk/projects/test_sartoris//.git/deploy/apps/prod/pre-sync.020_test.sh out->;prodn pre sync 2

1月14日23:07:40 info git_deploy.drivers.driver::调用pre sync app:"/users/rfaulk/projects/test_sartoris//.git/deploy/sync"…
1月14日23:07:40 info git_deploy.drivers.driver●在"prod"阶段调用"/users/rfaulk/projects/test戋sartoris//.git/deploy/sync/prod.sync"
1月14日23:07:40 info/users/rfaulk/projects/test戋sartoris//.git/deploy/sync/prod.sync out->;prod.sync

1月14日23:07:40 info git_deploy.drivers.driver::调用后期同步应用:"/users/rfaulk/projects/test_sartoris//.git/deploy/apps/prod"…
1月14日23:07:40 info git_deploy.drivers.drivers::调用'/users/rfaulk/projects/test_sartoris//.git/deploy/apps/prod/post sync.010_test.sh'处于"后同步"阶段
1月14日23:07:40 info/users/rfaulk/projects/test_sartoris//.git/deploy/apps/prod/post-sync.010_test.sh out->;prod post sync 1

1月14日23:07:40 info git_deploy.drivers.driver::正在调用"/users/rfaulk/projects/test_sartoris//.git/deploy/apps/prod/post sync.020_test.sh"on phase"post sync"
1月14日23:07:40 info/users/rfaulk/projects/test_sartoris//.git/deploy/apps/prod/post-sync.020_test.sh out->;prod post sync 2

1月14日23:07:40 info git_deploy.drivers.driver::调用post-sync应用:"/users/rfaulk/projects/test_sartoris//.git/deploy/apps/common"…
1月14日23:07:40 infogit_deploy.drivers.driver::调用"/users/rfaulk/projects/test戋sartoris//.git/deploy/apps/common/post sync.010戋test.sh"on phase"post sync"
1月14日23:07:40 info/users/rfaulk/projects/test戋sartoris//.git/deploy/apps/common/post-sync.010戋test.sh out->;common post sync
1月14日23:07:40 info git_deploy.lockers.locker::在stat1.wikimedia.org检查锁定文件。
1月14日23:07:41 info git_deploy.lockers.locker::rfaulk已锁定。
1月14日23:07:41 info git_deploy.lockers.locker::ssh lock destroy。
1月14日23:07:41 infogit_deploy.lockers.locker::正在删除stat1.wikimedia.org上的锁定文件:home/rfaulk/test_sartoris/.git/deploy//lock rfaulk.lock。




开发
----


欢迎拉取请求!如果你喜欢python和git,这可能是一个完美的项目。所有源代码都与pep8兼容。如果可能的话,请加入新的测试。

patrick reilly(gmail.com的patrick.reilly)和ryan faulkner(gmail.com的bobs.ur.uncle)。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java 安卓碎片问题   java获取通过字符串删除的内容。replaceAll()   java中的三角形数   JavaSpringbean作用域:会话和全局会话   java为什么JavaBeans不序列化类型列表中的属性?   java无法使用Spring和Thymeleaf在视图上传输对象   Java中变量内部的变量   java在Eclipse上调整黄盒大小并保持其大小   java使用Jackson将名称-值对数组反序列化为对象   安卓 Java多变量长度参数   java JavaFX版本的“isDescendingFrom(组件a、组件b)”   java如何在春季发送多个PDF?   java以不同的格式为联系人分配相同的号码   如何从打包到自己的java库中访问资源的文件。罐子   java模块化反射公共闭包原理   java应用程序在使用进程时停止响应。等待()   java React setState不工作,出现错误