如何从命令行打开 SourceTree?

Posted

技术标签:

【中文标题】如何从命令行打开 SourceTree?【英文标题】:How do you open SourceTree from the command line? 【发布时间】:2013-11-08 21:38:58 【问题描述】:

有没有一种快速简便的方法可以从命令行在 SourceTree 中打开 git 存储库?

我在终端上做了很多 git 工作,但有时无法替代良好的历史视图/差异。希望能够在不使用书签的情况下打开。

【问题讨论】:

【参考方案1】:

安装 SourceTree 命令行工具将为您提供stree 命令。这将允许您在 SourceTree 中打开当前目录。

你也可以指定一个特定的仓库路径

stree ~/my-repo-in-another-folder

如果由于某种原因无法安装命令行工具,您还可以执行以下操作:

open -a SourceTree path-to-file

并且可能在 .bashrc 或 .zshrc 中设置别名

alias sourcetree='open -a SourceTree'

对于使用 SourceTree 3 的用户

alias sourcetree='open -a SourceTree\ 3'

【讨论】:

您可以通过将其更改为alias sourcetree='open -a SourceTree ./' 来使您的sourcetree 别名打开当前工作目录中的git 存储库。 Mac 用户也可能希望将别名放在 .bash_profile【参考方案2】:

The answer by loeschg 可能不起作用;有些人在参考他们的系统日志时遇到错误,并且无法安装命令行工具。 There is an open issue about this.

A workaround is found here.使用:

ln -s /Applications/SourceTree.app/Contents/Resources/stree /usr/local/bin/

这将创建一个指向stree 二进制文件的符号链接并将其放入/usr/local/bin。确保该目录在您的路径上:which stree 应该导致/usr/local/bin/stree。如果没有,则手动将其添加到您的PATH 或使用echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile,它会为您完成(重新启动您的shell 以重新加载PATH 变量)。

在上述问题的页面上,发布了另一个我没有测试的解决方法:alias stree='/Applications/SourceTree.app/Contents/Resources/stree'。如果您使用它,请在 cmets 中报告它是否以及如何工作,以及为什么您更喜欢它而不是符号链接。

对于这两种方法,SourceTree.appstree 的路径当然必须与您安装SourceTree.app 的位置匹配。

现在,stree 已安装并可从任何目录访问。当您的 shell 的工作目录是存储库的根目录时,打开 SourceTree 的最短方法是 stree .

【讨论】:

我更喜欢alias 方法,因为它感觉不像在已经相对完整的目录中创建符号链接并且感觉它是自动为我管理的那样“永久”和更“便携” – Homebrew喜欢从那里的地窖中符号链接东西。另外,SourceTree 最近一直在对其 UI 进行更改,我不喜欢,所以我开始保留它的多个版本,以防万一。使用别名给了我更大的灵活性,我想在 bash 中定位哪个版本。 我也遇到了这个错误。什么对我有用:只需将 SourceTree 更新到 v3.0.1(Sourcetree --> Check for Updates...)。更新后,安装命令行工具工作正常。 :D(当我收到错误时,我的 Sourcetree 仍在 v2.7.6 上)【参考方案3】:

对于那些使用 Windows 的用户,您可以将名为 stree.bat 的批处理文件添加到 PATH 环境变量中的文件夹中。 (我的 PATH 中有一个 C:\batch 文件夹,用于存储我的所有实用程序批处理文件。)将以下内容放入您的批处理文件中:

@echo off
start "" "C:\Program Files (x86)\Atlassian\SourceTree\SourceTree.exe"

现在您可以转到任何 Git 或 Mercurial 存储库并运行此命令,这将在 SourceTree 中打开存储库。

【讨论】:

仅供参考:在我的机器上,源代码树未安装在 Program Files 中,它位于 C:\Users\\AppData\Local\SourceTree。可能是因为他们现在使用的是 Squirrel 安装程序?【参考方案4】:

为那些在 Bash 命令行 (msys) 上使用 Git 的用户提供了另一种 Windows 解决方案。

在你的 Bash .profile 中添加两个函数:

# Courtesy: http://***.com/questions/12015348/msys-path-conversion-or-cygpath-for-msys
function towinpath 
     cd $1 && pwd -W;  | sed 's|/|\\|g'


function stree 
    if [ -z $1 ]; then
        stree_path=$(towinpath pwd)
    else
        stree_path=$(towinpath $1)
    fi

    echo "Starting SourceTree in $stree_path"

    /c/Program\ Files\ \(x86\)/Atlassian/SourceTree/SourceTree.exe -f $stree_path status

重新加载你的外壳。

现在你可以使用了:

$ towinpath /c/Temp

它会回显c:\Temp

或者你可以打开SourceTree:

$ stree .

它将在 SourceTree 中打开此存储库,默认为状态面板。

【讨论】:

太棒了,谢谢!还有一个 Cygwin 函数 cygpath,您可以在其中执行类似于 function towinpath cygpath -w $(cd $1 && pwd); 的操作。这将更稳健地处理诸如 UNC 路径之类的事情。【参考方案5】:

如果您安装了 cygwin,您可以将其用作您的 stree.bat。此批处理文件使用cygpath. 解析为其绝对路径,因此您可以这样做stree .

@echo off
FOR /F "tokens=* USEBACKQ" %%F IN (`cygpath -w -a %1`) DO (
SET STREE_OPEN_PATH=%%F
)
%USERPROFILE%\AppData\Local\SourceTree\SourceTree.exe -f "%STREE_OPEN_PATH%"

【讨论】:

【参考方案6】:

Windows 中使用powershell,从您要在SourceTree 中打开的目录内部:

& 'C:\Users\userexample\AppData\Local\SourceTree\SourceTree.exe' -f (Get-Location)

注意:C:\Users\userexample\AppData\Local\SourceTree\SourceTree.exe 的路径可以更改为安装的任何SourceTree

对于 Exp:如果 SourceTree 以管理员权限安装,则此路径将为 C:\Program Files (x86)\Atlassian\SourceTree\SourceTree.exe 并且命令将变为

& 'C:\Program Files (x86)\Atlassian\SourceTree\SourceTree.exe' -f (Get-Location)

【讨论】:

【参考方案7】:

窗口

根据此处针对 Windows 的多个答案进行调整,这些脚本将允许您从命令行运行 SourceTree(在 SourceTree 3.0.1.7 / Windows 10 上测试)。

PATH 目录中的脚本

我已将这两个脚本放在我的系统 PATH 中的一个文件夹中。您不必为此脚本修改 bash 配置文件。

Windows 版 Git Bash

在您的 PATH 链接目录中创建一个名为 stree (touch stree) 的文件,并在此文件上运行 chmod u+x stree

#!/bin/sh

function towinpath 
     cd $1 && pwd -W;  | sed 's|/|\\|g'


if [ -z $1 ]; then
    stree_path=$(towinpath pwd)
else
    stree_path=$(towinpath $1)
fi

$LOCALAPPDATA/SourceTree/SourceTree.exe -f $stree_path log &

如果您更喜欢 SourceTree 中存储库的更改/工作目录视图,可以将最后一行中的“log”替换为“status”。

命令提示符或 Powershell

在您的 PATH 链接目录中创建一个名为 stree.cmd 的文件。

@echo off
start "" "%LOCALAPPDATA%\SourceTree\SourceTree.exe"

请注意,这实际上不会将目录打开为存储库。

请随时改进脚本,尤其是命令提示符。

【讨论】:

以上是关于如何从命令行打开 SourceTree?的主要内容,如果未能解决你的问题,请参考以下文章

Mac 上使用Source Tree免密设置

SourceTree运行慢的解决方案

用于 stage/unstage hunks/lines 的 git CLI 命令,例如 sourcetree

3SourceTree通过PUTTY连接GitLab

sourceTree 过期了怎么办

关于sourceTree从URL克隆遇到的问题