分享一个 MacOS 小工具 gopen - 快速打开 Git 仓库远程 URL - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
DjvuLee
V2EX    程序员

分享一个 MacOS 小工具 gopen - 快速打开 Git 仓库远程 URL

  •  
  •   DjvuLee 2024-07-12 11:15:14 +08:00 2429 次点击
    这是一个创建于 508 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在命令行里面经常需要在浏览器里面打开 github 上的 repo ,这个对外来说非常高频,我希望像操作系统里面的 open 命令一样简单。

    使用过各种小工具都不方便,比如官方的 gh, 都不方便。就自己开发了一个,分享给有需要的同学吧 https://github.com/libratiger/gopen

    功能

    • 自动打开远程 URL:从当前目录或指定目录的 Git 仓库中提取远程 URL ,并在浏览器中打开。
    • SSH 转换为 HTTPS:自动将 SSH URL 转换为 HTTPS URL ,以便在浏览器中访问。
    • 交互模式:支持用户通过交互界面选择要打开的多个远程 URL 中的某一个。
    • 目录指定:用户可以指定一个目录,从该目录下查找并打开远程 URL 。

    安装

    你可以通过 Homebrew 安装 gopen

    brew tap libratiger/homebrew-tap brew install gopen 

    使用方法

    默认模式

    在当前 Git 仓库目录中运行 gopen,它会自动打开第一个远程 URL 。

    gopen 

    指定目录

    在指定目录下查找并打开远程 URL 。

    gopen /path/to/git-repo 

    交互模式

    使用 -i 参数进入交互模式,用户可以选择要打开的远程 URL 。

    gopen -i 

    或在指定目录下使用交互模式:

    gopen /path/to/git-repo -i 
    20 条回复    2024-07-13 00:32:03 +08:00
    GPT6
        1
    GPT6  
       2024-07-12 11:54:31 +08:00
    powershell


    # 打开当前仓库
    Function gopen {
    # 获取所有远程仓库的名称和地址
    $remoteRepositories = git remote -v | ForEach-Object {
    $remote = $_ -split '\s+'
    [PSCustomObject]@{
    Name = $remote[0]
    Url = $remote[1]
    }
    }

    # 去重远程仓库地址
    $uniqueRemoteRepositories = $remoteRepositories | Select-Object -Property Url -Unique

    # 输出所有远程仓库的名称和地址
    $uniqueRemoteRepositories | ForEach-Object {
    Write-Host "Remote repository URL: $($_.Url)"
    Start-Process $_.Url
    }
    }
    DjvuLee
        2
    DjvuLee  
    OP
       2024-07-12 12:09:45 +08:00
    @GPT6 本身不复杂,就是几行脚本的事情,但是这个事情我感觉对应程序员还是很高频的。我刚更新了一个 rust 的版本
    dHenryDong
        3
    dHenryDong  
       2024-07-12 12:12:42 +08:00
    用 omz 配个插件就完事儿了 https://github.com/paulirish/git-open.git
    noahlias
        4
    noahlias  
       2024-07-12 12:19:35 +08:00
    gh repo view --web
    直接用 github 官方 cli 就好了
    xingheng
        5
    xingheng  
       2024-07-12 13:16:00 +08:00
    DjvuLee
        6
    DjvuLee  
    OP
       2024-07-12 13:25:27 +08:00
    @noahlias 之前就是用的这个,感觉太难用了。我其实就希望直接用苹果自带的 open 命令就好了.
    DjvuLee
        7
    DjvuLee  
    OP
       2024-07-12 13:26:50 +08:00
    @dHenryDong 和这个差不多,但是我希望提供一点交互式的界面
    DjvuLee
        8
    DjvuLee  
    OP
       2024-07-12 13:27:36 +08:00
    @xingheng 看过这个,这个工具想要做的东西太多了
    noahlias
        9
    noahlias  
       2024-07-12 14:23:56 +08:00
    @DjvuLee 这个还难用啊?
    说实话这种其实有很多其他的方式代替 感觉都很方便
    1:选择一个好的终端模拟器支持 URL 鼠标点击 比如 kitty 直接 git remote -v 点击打开就行
    2: 用 tmux-fzf-url 直接当前 buffer 选择打开 或者编辑当前 buffer 用 vim/neovim gx 打开
    3: 一个管道命令 `git remote -v | awk '{print $2}' | sort -u | fzf | xargs open` 用 git+fzf+open(其他系统换成不同的) 命令就解决了
    DjvuLee
        10
    DjvuLee  
    OP
       2024-07-12 14:28:48 +08:00
    我之前是选择的方法 1 ,我今天终于忍受不了
    DjvuLee
        11
    DjvuLee  
    OP
       2024-07-12 14:30:06 +08:00
    @noahlias gh 的命不容易记啊,也没有补齐,没有交互。
    noahlias
        12
    noahlias  
       2024-07-12 14:34:04 +08:00
    @DjvuLee gh 有 completion 啊 gh completion 不就是吗
    有 zsh/bash/fish 看看官方文档或者 help
    Donaldo
        13
    Donaldo  
       2024-07-12 14:55:25 +08:00
    确实是个高频需求,我有个小建议,名字改成 gg ,哈哈。
    Wxh16144
        14
    Wxh16144  
       2024-07-12 15:10:33 +08:00
    感觉还是 GitHub 官方的 CLI 香啊, 我设置了一个别名 gh ob(erver) 的意思。

    GitHub CLI: https://cli.github.com/

    ![image.png]( https://s2.loli.net/2024/07/12/85g627NyUpk3Ixt.png)
    DjvuLee
        15
    DjvuLee  
    OP
       2024-07-12 16:30:29 +08:00
    @Wxh16144 gh 功能挺全的,隔三差五就提示升级
    DjvuLee
        16
    DjvuLee  
    OP
       2024-07-12 16:31:26 +08:00
    @Donaldo 这个还是自己 alias 好
    bxb100
        17
    bxb100  
       2024-07-12 19:09:17 +08:00
    啊, 原来还有 gh 可以用=.=, 我也是受不了然后写了个 shell function `openg`

    https://github.com/bxb100/dotfiles/blob/69c5190e741c8b97b666d3fd294972ec5e6bb9f8/.functions#L225-L257
    DjvuLee
        18
    DjvuLee  
    OP
       2024-07-12 19:26:07 +08:00
    @bxb100 自己写的用的更加顺手,gh 的目标太多了
    datadump
        19
    datadump  
       2024-07-12 20:29:50 +08:00
    brew install libratiger/tap/gopen
    省一条指令
    jqtmviyu
        20
    jqtmviyu  
       2024-07-13 00:32:03 +08:00
    改成 zsh 函数

    ```sh
    # 定义 gopen 函数
    function gopen() {
    # 获取所有远程仓库的名称和地址
    remoteRepositories=$(git remote -v | awk '{print $2}' | sort | uniq)

    # 输出所有远程仓库的名称和地址,并在浏览器中打开
    for url in $remoteRepositories; do
    echo "Remote repository URL: $url"
    if command -v xdg-open &> /dev/null; then
    xdg-open "$url"
    elif command -v open &> /dev/null; then
    open "$url"
    else
    echo "Cannot find a way to open the URL in the browser."
    fi
    done
    }
    ```
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     922 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 20:28 PVG 04:28 LAX 12:28 JFK 15:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86