About cookies

7 Item(s)

per page

Set Ascending Direction
  • ]Project-Open[项目管理软件

    10 year(s) ago

    我们参与到了]project-open[的中文化工作.
    
    以下是该项目的国外官方网站
    
    www.project-open.org
    
    www.project-open.com
    
    国内爱好者网站:
    
    www.project-open.org.cn
    
    www.project-open.com.cn
    
    http://www.google.com/url?sa=t&source=web&ct=res&cd=4&ved=0CCAQFjAD&url=http%3A%2F%2Fwww.project-open.org%2F&ei=gDjWSoq2NJiI6wOt7YS8Ag&usg=AFQjCNE_qIHelinfxGO6LLqhJALRQgwITQ&sig2=qIBQ3JNYL27z_Yst8_l5Hw

  • 很荣幸我们成为了]Project-Open[的项目合作伙伴

    10 year(s) ago

    ]Project-Open[ 是一个非常优秀的项目管理系统.非常适合大型分布式项目控制和整体资源控制.
    系统模块包括了人力资源,项目控制,内部协同,资源调配,财务信息,版本控制等.
    
    我们参与了该项目的中文本地化.
    
    查看这个非常优秀的项目介绍:
    
    http://www.project-open.com
    
    http://www.project-open.org
    

  • 开源项目管理系统 ]Project-Open[ 的介绍

    10 year(s) ago

    ]project-open[ Releases Version 3.4 of its Project- and Service-Management
    Application
    
    Barcelona, November 6th, 2009: ]project-open[, a provider of open-source
    based project management software, announces the release of Version 3.4 of
    ]project-open[. The new version include an updated GUI, a new services
    management module and many other extensions.
    
    “Our open-source based project management solution has been designed for the
    specific needs of small and medium companies. "Working with ]project-open[
    provides you with real-time visibility into the status of your company."
    says Frank Bergmann, Founder of ]project-open[.
    
    ]project-open[ is an open-source based web project- and service-management
    application for small and medium consulting companies focused on processes
    including CRM, project tracking, resource management, Internet collaboration
    and finance.
    
    With ]project-open[, any authorized user can access the system anytime and
    from anywhere, evaluating all relevant project information. The integrated
    financial controlling module allows users to check profits and losses for
    projects and customers.
    
    ]project-open[ distinguishes itself from other open-source project- and
    service-management tools by its large degree of configurability and its
    support for financial processes and other enterprise features. This means
    that if small organizations start small and comfortably with SaaS hosting on
    a simplified configuration, they won’t need to change the system once they
    grow a bit. ]project-open[ distinguishes itself from closed-source
    competitors by price and openness, providing a much-improved ROI.
    
    The ]project-open[ architecture is based on Internet technology and is
    designed for mission-critical applications with high scalability and a
    sophisticated role-based permissions system.
    
    About ]project-open[:
    
    ]project-open[ is a company founded by German engineers. We are the main
    developers of the open-source based ]project-open[ product family. The
    business mission of ]project-open[ is to bring the benefits of open-source
    based Internet technology to small and medium companies.
    
    ]project-open[ ranks amongst the Top 50 most active open-source projects in
    http://www.sourceforge.net/. There are about 3.000 companies in 25 countries­
    using the system to run their business.
    
    ]project-open[ offers support, other professional services and extension
    modules for the ]project-open[ product family.
    
    For our detailed press kit, please visit us at:
    http://www.project-open.org/documentation/press_kit.
    

  • CI 持续集成与GIT分布式开发

    9 year(s) ago

    CI持续集成在敏捷开发有巨大意义。
    
    通过实施CI持续集成,我们可以保证客户的反馈尽早获得,与客户进行“现场”需求分析。
    
    但是由于传统版本控制工具在多人提交时候会出现效率下降,因此持续集成(也即快速反馈需求)的一个关键实现目标就是有一个快速高效的版本控制工具,在这点上git要比svn有优势。
    
    首先他是一个离线式的版本控制工具,本地和服务器都可以进行提交。那么在关键性的地方我们可以进行提交,集成确认问题。
    
    在实际项目实施过程中。我们发现:
    
    hudson作为持续工具很好很强大,针对其接口进行二次扩展可以很方便的完善系统的开发和应用。 不仅仅体现在版本控制,发布管理,还可以实现项目自动生成,变更。
    
    通过api远程获得数据,组装对应的产成品也不是问题。(当然这个脱离了其初衷了)
    

  • 关于php下代码质量控制-sonar

    9 year(s) ago

    我们在前一篇文章已经分享了持续构建代码和分布式版本控制带来的好处。
    
    但是没有一个好的机制去进行代码质量控制,显然前者带来的好处是没有太大价值的。
    
    因此引入一套代码质量评估工具尤其关键。
    
    在hudson系统我们每次提交代码后可以进行自动构建,生成评估代码分析。最终给代码审核以及主管了解项目质量状况。
    
    从长期项目维护性和复用性角度来说sonar可以提供的控制方面非常全面。
    
    php代码需要评估的部分包括:
    
    1  复杂度:
    
    代码行,类数量,方法数量,文件数
    
    2  维护性和代码冗余:
    
    评论比例,重复代码数量
    
    3 代码质量:
    
    单元测试覆盖率,测试成功情况
    
    4 代码约定
    
    通过以上几个方面评估后。sonar会给主管人员一个非常方便的结论。
    
    当然这个工具在分析大型系统也是非常缓慢的,我们在分析magento(不包括zend类库)的时候,发现系统计算较长时间。但是获得的结果是非常有价值的。
    
    通过这个软件,我们觉得有必要进行深入研究,对我们以后开发插件,确保代码可维护性和可扩展性。
    

  • svn的操作简介

    9 year(s) ago

    以下文字写的很完整,很详实。供开发者学习。管理维护人员借鉴。
    
    
    
    Subversion Introduction:
    Subversion is a software source code "Change Management" (CM) system for collaborative development. It maintains a history of file and directory versions. The files and directories are checked out of the repository and into your local project work area. This called your "working directory". Changes are made to files in your "working directory". After changes are made to the create the next working version, the files are checked into the Subversion CM repository.
    Subversion Commands:
    Subversion command summary cheat sheet:
    Command Description
    svn --help List Subversion commands
    svn help command Also: ? or h Help on given "command"
    svn add filenamesvn add directory Add a file or directory to Subversion CM control. Must also perform: svn ci filename (or svn commit) to upload the file or directory. File will not be available in the repository until a "commit" is performed. If adding a directory, the directory and all of its contents recursively are added. i.e.: svn ci directory svn commit directory svn commit .
    svn blame filename svn blame -r RevisionNumber filename Also: praise, annotate, ann Show file contents with revisions annotated with author information.
    svn cat filename List contents of file under Subversion control.
    svn checkout http://node-name/repos/svn/trunk/parentPath/path This creates: path/file1 path/file2 ...svn checkout http://node-name/repos/svn/trunk/parentPath . This creates: path/file1 path/file2 ... Note the difference a "." makes. svn checkout file:///repos/svn/trunk/path/ svn co -r 497 http://node-name/repos/svn/trunk/path file-name Also: svn co https://..., svn://..., and svn+ssh:// MS/Windows: svn co file:///c:/repository/project/trunk Checkout every file from the path and subdirectories specified below. Creates "working" copy of files and directories. Checkout a repository.Use option "-r" to specify a specific revision other than the latest. The URL "svn://" communicates with an SVN server (port 3690) The URL "http://" comunicates with the Apache server and modulemod_dav_svn (port 80) [more common server]
    svn cleanup Cleanup subversion files resulting from escaped processes and crashed.
    svn commit filename svn commit --message "Message goes here." filename svn commit -m "Message goes here." filename svn ci filename1 filename2 filename3 svn ci . Check-in (commit) local "working" file, files or directory and contents (recursively) into Subversion repository. Atomic, i.e. all committed or none, no incomplete check-in.
    svn copy source destination_clone Also: svn cp ... Copy file or directory tree. One can copy from one local working copy to another or to repository server URL's. The sources and destinations can be working copies or URLs.
    svn copy http://host/repos/project/trunk http://host/repos/project/tags/TagName-1.4.5 -m "Tag Release 1.4.5" Tag a release. Takes a snapshot of the repository and assigns a name. This can be performed at any directory branch.
    svn copy . http://host/repos/project/tags/TagName-1.4.5 -m "Tag Release 1.4.5" Tag a release. Takes a snapshot of your local working copy and assigns a name. This can be performed at any directory branch.
    svn delete filename svn delete directory Also: del, remove or rm svn rm http://host/repos/project/trunk/file-or-directory Delete file from repository. The UNIX command rm file-name. Must perform a "commit" to update the repository and local working directory with the changes. i.e.: svn commit .
    svn diff filename svn di filename Show file diffs between SVN repository and your file changes using GNU file diff format. Use GUI diff tools as shown below.
    svn diff -r rev1:rev2 filename Show file diffs between specified versions. Example: svn diff -r 456:459 subfn.cpp Using GUI diff tool: svn diff -r 457:459 --diff-cmd kdiff3 file-name
    svn diff filename > patch-file Generate patch file used by the patch command.
    svn export directory Export directory tree to your file system but it will not be a "working directory" under SVN control.
    svn export -r Rev-Number http://node-name/path Export directory tree of specified version and create local directory tree and files not under SVN control.
    svn import local-directory http://node/repos/svn/trunk/directory Add directory (and files in it recursively) to path in repository specified.
    svn info filename Display information about file or directory. (Date modified, author, revision, path in repository.) Can not specify a URL.
    svn list directory svn list file-name List file or directory of files in repository. Used to browse repository before checkout. If current directory is given (svn list ./), then Subversion will list the repository URL of the current directory.
    svn list -r RevisionNumber directory List directory of files in repository in specified revision.
    svn lock filename -m "comment as to why its locked or by whom" (Comment is not required but is often useful) Lock file to grant exclusive access to one and forbid all others. A commit will unlock the file (unless the "--no-unlock" option is used). A lock can be removed with the commands: svn unlock filename, svnlook and the svnadmincomands (i.e. List: svnadmin lslocks and remove: svnadmin rmlocks filename).
    svn log filename svn log . svn log http://URL/path/file svn log -v . svn log -r RevisionNumber http://URL/path/file Show the Subversion log messages for a set of revision(s) and/or file(s) and/or all directory contents in repository. List verbose. Includes list of all files in change Shows the file changes associated with revision number.
    svn merge http://url/path/branch1 http://url/path/branch2 working-local-dir svn merge file1@revJ file2@revK svn merge -r 414:411 http://url/path working-dir svn merge -r 413:HEAD file-name Merge directory changes into your current working directory or merge a file in Subversion into the file in your working directory. If target is not specified, the identical basename or current directory is assumed. Used to incorporate changes checked in which are not accounted for in your file or to merge branches. Example using GUI merge tool: svn diff -r 459:454 --diff-cmd kdiff3 --extensions '-m' file-name Next, tell subversion that the conflicts have been resolved: svn resolve file-name Finally, check-in file: svn ci file-name or abort changes: svn revert file-name
    svn merge --dry-run -r 414:413 http://url/path Test merge. No changes are made to your local working copy but shows Subversion feedback as if merge was performed.
    svn merge -r 414:413 http://url/path svn merge -r 414:413 . Undo changes committed in revision 414.
    svn mkdir directory svn mkdir http://URL/directory Create a new directory under version control.
    svn move directory1 directory2 svn mv directory1 directory2 svn mv file-old-name file-new-name Rename or move a file or directory. Moves/renames file/directory in repository and in local work area. Must perform svn ci file-new-name after the move for changes to to take place in repository.
    svn revert filename Undo changes in local work files. Throw away local changes.
    svn resolved filename Run this command after resolving merge conflicts. Next "commit" your changes.
    svn status svn status -u svn status -u . svn status -uq . Show status of file changes in current directory and recursively in directories below. Show out of date file info: svn status --show-updates (equivalent: svn status -u) -u: Determines status by comparing your local repository with the server repository. Without this option, the status shown will only be the changes you have made in your local repository.-q: Quiet. Do not print "?: File/directory not under version control" or "!: File/directory missing" extraneous information. First collumn:
    • A: File to be added
    • C: Conflicting changes
    • D: File to be deleted
    • G: File to be merged with updates from server
    • M: File has been modified
    • R: File to be replaced
    • G: File to be merged
    • X: Resource is external to repository (svn:externals)
    • ?: File/directory not under version control
    • !: File/directory missing
    • ~: Versioned item obstructed by some item of a different kind.
    Second collumn: Modification of properties
    • ' ' no modifications. Working copy is up to date.
    • 'C' Conflicted
    • 'M' Modified
    • '*' Local file different than repository. A newer revision exists on the server. Update will result in merge or possible conflict.
      • ' ' not locked
      • 'L' locked
      • 'S' switched to a branch
    • Third collumn: Locks
    svn switch http://server/new-branch svn switch --relocate http://server/old-path http://server/new-path Switch your local working copy to mirror a new repository branch instead of main trunk or previous branch. Also allows you to point your repository to a new path on the server if the server path changes since you performed a check-out.
    svn update svn update filename svn update -r458 filename svn update --ignore-externals ./ Migrate all updates from Subversion repository to your local copy (recusively for all files in the current directory and all below it). If there have been updates to the svn repository since you downloaded the files, subversion will give you the opportunity to merge. Status of files will use the coding as stated above for "status". Files marked with a "C" (conflict) should be merged of reverted. If merged then one can perform a "resolve" and then a "check-in". If a file name is specified, only that file is updated. Can also syncronize to a specified revision given by -r. Use --ignore-externals to avoid the slow processing of externals to a potentially slow distant internet server.
    Where RevisionNumber is:
    • HEAD: The latest revision in the repository.
    • BASE: The "pristine" revision of an item in a working copy. Matches checked out version before any modifications.
    • COMMITTED: The last revision in which an item changed before (or at) BASE.
    • PREV: The revision just before the last revision in which an item changed. (Technically, COMMITTED - 1.)

    Example Session:

    (Assumes that the repository has already been created. For Subversion repository creation and Subversion server configuration, see the (YoLinux Subversion and Trac tutorial )
    • Checkout: svn checkout http://svnserver/repos/svn/trunk/Project1
    • Go to source code directory: cd Project1/src
    • Edit files:
      • vi file1.cpp
      • vi file2.cpp
    • Verify and test: make We are ready to check-in the files into the Subversion repository.
    • Check repository and report on new revisions and changes others have checked in: svn status -u .
    • After many long hours or days of editing and work, get updates others have made: svn update
          U file.h
          C file1.cpp
          G file2.cpp
          ? a.out
      You will see:
      • U: File was updated with a newer version checked-in since your checkout.
      • G: Automatically merged with no conflicts.
      • C: Not merged due to conflicts. You made changes to the same section of code as the update made by someone else since your checkout.
    • For each "conflicted" file there will be three new local files generated by "update":
      • file1.cpp.mine (File - post editing)
      • file1.cpp.rold (BASE - pre editing)
      • file1.cpp.rnew (HEAD - Updated file from repository)
      The file file1.cpp still exists but with svn conflict marker strings added in the file. At this point, a check-in will fail until the merge is resolved.
    • Merge options:
      • Edit the file file1.cpp Text markers are placed in the file to show the conflicts between the "HEAD" and "mine" versions. OR
      • tkdiff -conflict file1.cpp OR
      • Use a GUI merge tool: kdiff3 file1.cpp.mine file1.cpp.rnew -o file1.cpp OR
      • Throw out your changes/abort: svn revert file1.cpp No resolve or check-in necessary if file is reverted.
    • Verify and test, again: make
    • Notify Subversion that conflicts have been resolved: svn resolved file1.cpp Note: This also removes the temporary files ".mine" and ".r###".
    • Check-in to Subversion repository: svn ci -m "Add comments here" file1.cpp

    Subversion Peg revisions:
    Peg revisions are used so Subversion can find a previous version of a resource (file or directory) if its' location was different than it is now. Peg revisions are that extra hint Subversion needs to clear up ambiguity. $ svn command -r OPERATIVE-REV item@PEG-REV The default peg revision is BASE for working copy items and HEAD for repository URLs. When no operative revision is provided, it defaults to being the same revision as the peg revision. The PEG-REV is specified if the resource (file/directory) in question use to appear in a directory which is no longer in the same place or no longer exists. The "peg-revision" must be specified so subversion can look at the directory in that revision so it can find the resource. If a peg revision is specified without an operative revision, then the operative revision is assumed to be the same as the peg revision. For more see: http://svnbook.red-bean.com/en/1.5/svn.advanced.pegrevs.html
    Subversion Properties:
    Files under revision control can include Subversion keywords which properties can be set with the "propset" command. Keywords are substituted with the Subversion properties and will not appear in the file until a commit is performed. Other properties are used to modify the behavior of Subversion. The following properties can be set on entities stored in Subversion:
    Property Description
    svn:ignore A newline separated list of file patterns to ignore. List of files/directories to be ignored by svn status
    svn:keywords Valid RCS style keywords are:
    • HeadURL - The URL for the head version of the object. Also: $URL$
    • LastChangedBy - The last person to modify the file. Also: $Author$
    • LastChangedDate - The date/time the object was last modified. Will appear as: $LastChangedDate: 2005-07-22 22:02:37 -0700 (Fri, 22 Jul 2005) $ Also: $Date$
    • LastChangedRevision - Describes the last known revision. Will appear as: $LastChangedRevision: XXX $ where "XXX" is the revision number. Also: $Rev$, Revision
    • $Id$ - A compressed summary of the previous 4 keywords.
    Example RCS style comment Example Output
    /* $URL$
       $Rev$
       $Author$
       $Date$
       $Id$
     */
    
    /* $URL:http://server/svn/path/file.cpp $
       $ Rev:2 $
       $ Author:Greg $
       $ Date:2006-10-12 14:31:84 -0400 (Thu,12 Oct 2006)$
       $ Id:file.cpp 3 2006-10-12 18:31:84Z Greg $
     */
    
    svn:executable Ensure file attribute is executable. Possible values: ON, OFF Example: svn propset svn:executable ON app.exe
    svn:eol-style One of 'native', 'LF', 'CR', 'CRLF'. Specify and maintain specified line ending for text file.
    • LF: Unix, Linux, standards based OS, proprietary legacy systems, etc.
    • CRLF: DOS and Microsoft OSs
    • CR: Response input scripts, etc
    Example: find ./ -name "*.h" -exec svn propset svn:eol-style LF {} \;
    svn:mime-type The mime type of the file:
    • text/html
    • text/css
    • text/plain
    • image/jpeg
    • ...
    See file /etc/mime.types for a list of mime types.Examples:
    • svn propset svn:mime-type text/plain file.cpp
    • svn propset svn:mime-type text/html file.html Web pages rendered from subversion will display as HTML source rather than as a web page unless this mime type is applied.
    svn:needs-lock Prevents conflicts for files which can not be contextually merged. i.e. photos, binaries, object libraries.
    svn:externals List of files or directories pointed to. Locate repository where directory specified should be retrieved. The directive propset is not required:svn propedit svn:externals local-target-dir
    local-target-dir http://server/svn/dir-remote local-target-dir/subdir -r### http://server/svn/dir-remote2
    svn update svn commit svn propget svn:externals ./The property applies to the directory. Subversion can not list or web browse svn:externals. Check-out ("co"), "export" and "log" can be performed. Must set environment variable "EDITOR", "SVN_EDITOR", "VISUAL" or set the Subversion configuration file (~/.subversion/config) attribute editor-cmd. i.e.: export EDITOR=vi Note: Subversion 1.6 introduces file externals in addition to directory externals. The files however must reside in the same repository. Also, the file must point to a location which exists in your local working directory. [Potential Pitfall]: Apply svn externals to directories and not files. (version 1.4) [Potential Pitfall]: If generating a tag (branch), one should assign the revision number to the external link to truly snapshot the repository for that tag. This revision number should be specified in the tagged branch version of the svn external. [Potential Pitfall]: The revision numbers shown by svn info will reflect the version numbers of the repository in which the files are stored. If the files are imported via an svn external directory, the revision numbers will reflect that of the external repository which the external points to and thus from where the files were imported.
    Command Description
    svn propdel PropertyName file-name svn propdel --revprop -r RevisionName http://url/path Also: pdel, pd Remove property name from files or directories. Remove properties on file in repository.
    svn propedit PropertyName file-name svn propedit --revprop -r RevisionName http://url/path Also: pedit, pe Edit property name of files or directories. Edit properties on file in repository.
    svn propget PropertyName file-name svn propget --revprop -r RevisionName http://url/path Also: pget, pg Print value of property name of files or directories. Print properties on file in repository.
    svn proplist file-name svn proplist * svn proplist --revprop -r RevisionName http://url/path Also: plist, pl List properties of file, files or directory.
    svn propset PROPNAME PropertyValue file-name svn propset PROPNAME --revprop -r RevisionName PropertyValuehttp://url/path svn propset svn:mime-type text/html file-name.dat Also: pset, ps Set properties of file or directory. Set mime type for a file in the repository. Must perform a commit to upload changes to the repository.Set file properties so that "^M"'s are removed upon check-in: svn propset svn:eol-style LF file-name.txt See YoLinux Subversion server configuration tutorial: No ctrl-M.

    Subversion and Graphical diffs for Linux:
    Three types of file differences are covered in this section:
    1. Show file differences made since checkout was made. This shows the changes you have made. It is usefull to perform this before an update.
    2. Show file differences between two files versions stored in Subversion.
    3. Show differences / conflicts, choose and merge. Use our bash script svndiffwrapper which integrates into Subversion's file check-in process.

    1) File differences since checkout:
    The following scripts will allow you to view the changes you have made since checkout. Use the script before running "svn update" as an update will alter the file with diff chevron (>>>>) markers. After performing a "svn update", use tkdiff, gtkdiff or kdiff3 as described below instead of the scripts: Use the following bash shell script to use the graphical diff tool "mgdiff" with Subversion.
    svndiff:
    01 #!/bin/bash
    02 # svndiff 1.0
    03 # usage: svndiff file
    04
    05 if [[ ! -d .svn ]]
    06 then
    07 echo ERROR: You are not working in an SVN directory.
    08 exit 1
    09 fi
    10
    11 rev="--revision HEAD"
    12
    13 if [[ ! -n $1 ]]
    14 then
    15 echo "Usage: svndiff [option] file"
    16 echo "Options:"
    17 echo " -h Diff with latest in repository (HEAD) - Default"
    18 echo " -b Diff with what you had checked out (BASE)"
    19 echo " -c Diff with COMMITTED, the version before BASE"
    20 echo " -p Diff with PREV, the version before COMMITTED"
    21 echo " -r revnum Diff with specified revision (specify integer)"
    22 exit 1
    23 fi
    24
    25 while getopts ":r:hbcp" Option
    26 do
    27 case $Option in
    28 h) rev="--revision HEAD";;
    29 b) rev="--revision BASE";;
    30 c) rev="--revision COMMITTED";;
    31 p) rev="--revision PREV";;
    32 r) rev="--revision $OPTARG";;
    33 *) echo "Incorrect option specified. Use -h or -b or -r #";;
    34 esac
    35 done
    36 shift $(($OPTIND -1))
    37
    38 # Define graphical diff tool
    39 #
    40
    41 # The geometry option used by Motif, Tcl and X based programs
    42 geometry="-geometry 1280x800+0+0"
    43
    44 # The following is for Motif diff
    45 # -w: ignore white space
    46 dif="mgdiff -args -w"
    47
    48 file=$1
    49 prev=${file}_PREV
    50
    51 # Trap bash command signals
    52 # SIGINT 2
    53 # SIGQUIT 3
    54 # SIGTERM 15
    55 trap "rm -f $prev" 2 3 15
    56 svn cat $rev $file > $prev 2>/dev/null
    57 $dif $geometry $prev $file
    58
    59 sleep 1
    60 rm -f $prev
    Compares your current local copy with the latest in the repository (Default "-h").
    OR Use the following bash shell script to use the graphical diff tool "gvimdiff:" with Subversion:
    svndiff:
    01 #!/bin/bash
    02 # usage: svndiff file
    03
    04 if [[ ! -d .svn ]]
    05 then
    06 echo ERROR: You are not working in an SVN directory.
    07 exit 1
    08 fi
    09
    10 # Define graphical diff tool
    11 #
    12
    13 dif="gvimdiff \"+colo morning\" -R"
    14
    15 file=$1
    16 prev=PREV_${file}
    17
    18 # Trap bash command signals
    19 # SIGINT 2
    20 # SIGQUIT 3
    21 # SIGTERM 15
    22 trap "rm -f $prev" 2 3 15
    23 svn cat $file > $prev 2>/dev/null
    24 $dif $prev $file
    25
    26 # Sleep for non-blocking apps like gvimdiff.
    27 # Allow gvimdiff to read file before it is deleted.
    28 sleep 2
    29 rm -f $prev
    Compare your current local copy with the original copy you checked out.

    2) File differences between two revisions:
    This configuration supports the use of GUI diff tools with Subversion by using the command: svn diff -r 457:459 --diff-cmd Some diff tools are supported with native svn. i.e.: svn diff -r 457:459 --diff-cmd kdiff3 file-name while others require a wrapper script to arrange the arguments correctly. Subversion configurations and defaults are specified in the file: $HOME/.subversion/config
    ..
    ...
    
    [helpers]
    editor-cmd = gedit
    diff-cmd = /opt/bin/diffScript
    diff3-cmd = /opt/bin/diff3Script
    
    ...
    ..
    
    This configuration configures Subversion to execute the script /opt/bin/diffScript to launch your own diff toolwith the command: svn diff -r Old:New URL.File: /opt/bin/diffScript
    01 #!/bin/bash
    02
    03 LeftLabel=$3
    04 RightLabel=$5
    05 LeftFile=$6
    06 RightFile=$7
    07
    08 #gtkdiff $LeftFile $RightFile
    09 tkdiff $LeftFile $RightFile -L "$LeftLabel" -L "$RightLabel" &
    10
    11 # wait for command to finish
    12 wait
    Note: To debug what is passed as a command line argument to the diff tool, set the diff-cmd to "echo":
    ..
    ...
    
    [helpers]
    diff-cmd = echo
    
    ...
    ..
    
    This configuration echos to the screen the command line arguments being passed to the diff tool when the following command is executed: svn diff .....i.e. -u -L d0/f01.cpp (revision 1) -L d0/f01.cpp (working copy) d0/.svn/text-base/f01.cpp.svn-base d0/.svn/empty-file

    3) Conflicts, file differences and merge:
    • tkdiff: Subversion conflict resolution merge: tkdiff -conflict file1.cpp Select from tkdiff toolbar: "Merge" + "Show Merge Window" to open third results window.
    • kdiff3 diff and merge: svn diff -r 457:459 --diff-cmd kdiff3 --extensions '-m' file-name
    • svndiffwrapper: Bash script to add options to Merge|Ignore|Accept|Revert etc as a result of a check-in. This script does it all!!
      Edit file: $HOME/.subversion/config
      ...
      
      [helpers]
      diff-cmd = svndiffwrapper
      diff3-cmd = svndiffwrapper
      
      ...
      
      Use our bash script svndiffwrapper to perform this integrated task. By default, uses kdiff3 for diff tool. Can also specify your own choice of diff tool. Place the script in /opt/bin/ for global use or $HOME/bin/ for private user access and set permissions so that script execution is allowed: chmod ugo+x /opt/bin/svndiffwrapper

    List of graphical diff and merge tools:
    • tkdiff: [download] Comes with tkcvs Subversion GUI front-end. Examples of Subversion diffs with tkdiff: (See: tkdiff --help)
      • tkdiff old-URL@revA new-URL@revB
      • tkdiff -r457 -r459 file-name
      Note: Use command "svn log file-name" to view valid revision numbers for the file. Referencing invalid revision numbers as input to tkdiff will not work.
    • gtkdiff: Has diff3 and merge features. Written with GTK+. After gtkdiff-0.8.0, GNOME desktop required.
    • diffUse: Diff/merge GUI tool. Good line matching features. Supports Unicode.
    • kdiff3: Graphical directory and file diff, merge and edit. KDE3/Qt based. Supports drag and drop. Comes with S.u.S.E. distro. (Cross platform) MS/Windows download available. A very good directory and file diff and merge tool.
      • Difference: kdiff3 file1 file2
      • Difference: kdiff3 file1 file2 file3
      • Difference of two files: kdiff3 directory1/file directory2
      • Difference: kdiff3 directory1 directory2
      • Merge: kdiff3 directory1 directory2 -o dest-directory
      • Merge: kdiff3 file1 file2 -m
      • Merge: kdiff3 file1 file2 -o output-file
      • Diff with SVN: svn diff -r 457:459 --diff-cmd kdiff3 file-name
    • Kompare: Ships with (RHEL4/FC3) KDE SDK. [manual]
    • mgdiff: [download] Motif-based graphical file difference browser and merge. Comes with S.u.S.E. distro.
    • Meld: Compare, edit and merge.
    • fldiff: Graphical file and directory diff. (Cross platform)
    • xxdiff: Compare 2 or 3 files and merge. Also compares directories.
    • gvim and gvimdiff

    Subversion GUI interfaces for Linux:
    • TkSVN / TkCVS: Tcl/Tk based GUI. A very good Unix/Linux and MS/Windows GUI front-end to Subversion. Simple to install (requires tk). Supports GUI diff/merge, branching, tagging, editing, check-in/check-out, ... Installation to /usr/local/bin and lib (Add to your path.): (requires RPM: tk version 8.4+)
      • tar xzf tkcvs_8_0_3.tar.gz
      • cd tkcvs_8_0_3
      • ./doinstall.tcl -nox /opt
      Configuration: (See: ~/.tkcvs)
      Set default editor and diff tool:
      ...
      set cvscfg(editor) "xterm -e vim"
      set cvscfg(tkdiff) "tkdiff"
      
      Also see default config file: /opt/lib/tkcvs/tkcvs_def.tcl Sets default editors for various file types. Set editor to "gedit" for rookies.
      If you want to run TkSVN / TkCVS on MS/Windows, download Tk for MS/Windows. It can also be run from the Cygwin environment using Tk provided in the Cygwin shell.
    • Tigris.org: RapidSVN: Dependent on wxWidgets cross platform C++ GUI API. Download RPMs from Dag Wieers:
      • rapidsvn-0.7.2-1.2.el4.rf.i386.rpm
      • wxGTK-2.4.2-5.2.el4.rf.i386.rpm
    • pysvn: Python subversion front-end. (cross platform) [download]
    • eSVN: qt based GUI. Mediocre.
    • KdeSvn: KDE front-end.
    • Subcommander: Subversion GUI client with visual diff and merge tool with support for different text encodings
    • Subview: GTK based subversion (1.3+) client.
    • JSVN: Java SVN client
    • Syncro SVN Client - Commercial product. Editor, diff tool and SVN client in one integrated tool.

    Web Clients:

    Plug-ins:


    Subversion Security Tips:
    One should be aware of a possible Subversion client security hole. The Subversion client authentication will cache your login and password in your home directory in non-encrypted clear text. It will have file system security so others can not read the file however, it still is visible by root or by a root user of the file server if one is used for home directories. Here are three solutions to reduce this potential security vulnerability:
    1. Don't allow Subversion to cache the password: svn commit -F file.txt --no-auth-cache This will request a username and password but will not store it.
    2. Set the Subversion configuration file on server to not cache:
      [auth]
      store-auth-creds = no
      
    3. Delete cached files when you logout. Reduces risk but does not eliminate it. This uses the bash shell logout script to perform a clean-up of the authentication files.
      File: ~/.bash_logout
      1 rm ~/.subversion/auth/svn.simple/*

    Subversion utility commands and scripts:
    Command Description
    svnversion local-path This svn admin command will produce a compact version number for a working copy. Lists range of versions, adds "S" if switched, "M" modified.
    svnchangesince Shows the changes to the subversion repository since the local copy was last updated.
    svnlastlog Displays the last log message that pertains to the current working copy. Simplified svnlastchange.
    svnlastchange Displays the last log message and a unified diff of the changes made in the last commit.
    svn-clean Removes all the files and directories that are not in Subversion.
    List of KDE scripts (See scripts which start with "svn")
    Report Generation: Often one will have to generate a report or source list. The following awk script and command will generate a simple source version description report:
    File: svd_report.awk
    1 BEGIN { RS="";
    2 FS = "\n";
    3 printf("%-75s %5s %-45s\n","Path","Rev","Last Change Date"); }
    4 /^Path:/ { n1 = split($1,path,":");
    5 n2 = split($6,revision,":");
    6 n3 = split($11,changeDate,": ");
    7 printf("%-75s %5s %-45s\n", path[2], revision[2], changeDate[2]); }
    Command to generate the report: svn info -R * | awk -f svd_report.awk The Subversion "info" command will generate a dump of information about all of the files under Subversion control recursively (-R) through all subdirectories. The AWK script will parse the output and generate a simple report. The AWK script views the Subversion output as an AWK record seperated by blank line where the content of each line is deliminated by the ":" (colon). For more information on AWK scripts, see the awk man page

    Subversion Best Practices:
    • ALWAYS compile and test before checking in source code. Subversion revisions should correspond to revisions which compile.
    • Always add check-in comments. Nothing is more obnoxious that looking at a blank log or information history.
    • Monstrous binary files like CD or DVD ISO images are better suited for storage on a file system rather than in Subversion. Subversion will not be able to show differences betwen version and will be slower than a raw filesystem.
    • Don't copy, rename and move directories and files with system shell commands. Use Subversion commands to "rm", "mv", and "add" directories and files and then commit changes when done. Work within Subversion.
    • Commit changes as a single logical changeset for one purpose. Thus all code changes for a single bug fix or enhancement should be checked-in together. This allows one to better follow the history log of changes.
      • Check-in code at the directory level and all changed files, recursively in the directory and subdirectories will be checked in together. svn ci -m "Check-in comment goes here" ./
      • Check-in files together by specifying them explicitly: svn ci -m "Check-in comment goes here" file.cpp file2.cpp ...
    • Tie Bug tracking and Subversion CM together:
      • Use comments when checking-in files into Subversion. Add bug tracking numbers to the comments so Subversion will reference Trac bugs.
      • If using Trac, add trac comments so that links are generated to the Subversion repository by placing the Subversion revision number in square braces (i.e. [1140]) in a Trac comment. In this way, Trac will have a direct URL link to Subversion.
    • If using Trac integrated with Subversion, refer to the Trac ticket in the Subversion check-in comment using a "#" in front of the Trac ticket number (eg. #65) This generates a hyperlink when the Subversion logs are viewed in Trac.
    • Taking code from a Subversion repository for upload to another: Use "svn export" and NOT "svn co" if you want files for upload into another CM repository. A checkout (svn co) will create Subversion management directories (.svn/) in the local working copy. You will not want to upload these directories into a CM system as they are only for the user's local working directory only. An "export" will not create these directories.
    • The "tags" branches are NOT to be used as working branches but are snapshots of an existing branch. The "tags" are for historical reference such as a release, well tested version or progress milestone.
    • Documentation and related artifacts should not be under the source tree but parallel to it. This isolates the source tree so that email notification triggers sent to developers upon source changes will only go out on source changes or regression build and test systems like Cabie will only rebuild and test on source changes rather than on unrelated documentation changes.

  • 叶朋谈“简单管理”

    8 year(s) ago

    20091104100443547
    
    原发自 FT中文网
    
    叶朋是高原资本的投资董事,此前是百度COO,再之前是苹果中国区总经理。他眼中的互联网和管理又是如何?
    
    程:您的管理经验有总结吗?
    
    叶:三个词:聚焦,简单,100%的执行。
    
    程:听起来很耳熟,不少人都这样总结。请解释下。
    
    叶:聚焦。能做到的前提是抓住行业或问题的本质与重点,否则无法够聚焦。但你怎么能够知道本质和重点?那就需要真正懂得与深刻理解这个行业,明确公司的定位。说定位,无非就是舍得,你要回答清楚:想要什么,放弃什么;是什么,不是什么。一个公司什么都要,就没有定位,就什么都不是。
    
    不少企业家和经理人很忙,就因为工作没有重点。优秀的企业家和经理人是不忙的,他知道哪些工作是不必做的。有些人一旦不忙,就会心慌,忙似乎意味着充实,忙成了这些人追求满足感、安全感的途径。但是他们错了,重要的是在正确的时间,正确的地点做重要和正确的事情,不重要的事情,或者时机不正确是,不需要去做。
    
    程:那简单呢?
    
    叶:所谓完美,就是把不需要的东西全部拿掉,也就是简约至极,大道至简就是这个道理,对人,对事,对公司都是一个道理。要做到简单,必须把上面第一条做到:也就是聚焦。抓住问题的核心是简单的前提,是最有效的方法。抓不住问题的核心就无法做到简单。中学时候学几何,优秀的学生,两三步就解出来了答案,差学生得要十几步。虽然问题都得到解决,但在工作和生活中,十几步是浪费资源,两三步就简单,因为优秀学生抓住了问题的核心。
    
    想要做到简单,有个捷径:招最优秀的人。这是最有效、最省钱的方法。早些年,乔布斯说一个优秀的人能顶10个一般人,后来变了,认为一个优秀的员工能顶50个一般的员工。
    
    程:这跟中国人讲的“三个臭皮匠顶个诸葛亮”的谚语不一致。
    
    叶:乔布斯的说法有其道理。第一是工资成本,一个优秀的人,工资一般就是一般人的2~2倍。第二是沟通成本,要一个优秀的人明白一个事情很容易,但要10个一般人都明白一个事情,难啊。相比而言要花几十倍的时间。而且这10个人之间还要相互沟通,相互说服,对同一事情的理解自然会有不同,因此很难达成真正意义上的一致。第三是产出,最优秀的人才通常能给出最佳的解决方案,这是最重要的一点。最佳的解决方案用最少的时间、最少的资源、达到最大的效果。这里又会节省大量的成本,并有最好的效果。
    
    程:道理是这样,做起来难在哪里。
    
    叶:需要环境。企业是否准备好了去招最优秀的人?比如,老板和团队有没有准备好,有没有足够的胸怀接纳富有个性的优秀人才?如何确保空降人才与现有团队的融合?空降的人才自身是否做好充分的准备融入新的公司?等等。否则即使优秀的人来了,也很难生存。天时地利人和缺一不可,也就是在恰当时间引进恰当人才。引进人才的背景与能力对于企业现阶段的发展如果过于超前,对双方都不合适。
    
    程:最后是执行,确保真正的100%的执行。
    
    叶:一件事情如果没做成,一定要找原因。不能简单的说:决策是错的或者团队不行。一个决策的执行最后失败不外乎有几个原因:一,决策本身是错的,也就是天时地利不对,一开始就注定要失败。这就不是执行的错误。二,应该给予的资源没有给,或者没有给够。三,没有找合适的人去执行这个决策。四,组织架构的每一级、每一个团队是否100%的执行。如果公司有5个层级,每一个层级的执行效果都是90%,5个90%相乘的结果是59%,不及格。要知道,每个层级的90%的执行效果,自以为很不错了,但一迭加,不及格。所以一定要100%执行。以上几点都和人有关,特别是企业的领导者以及管理团队。
    
    作者:程苓峰 http://t.qq.com/chengl
    

7 Item(s)

per page

Set Ascending Direction