V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
frylkrttj
V2EX  ›  git

git 能配置自动跟踪目录内的文件吗?

  •  
  •   frylkrttj · 2019-01-21 12:33:28 +08:00 · 5843 次点击
    这是一个创建于 2136 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如我想 git 跟踪目录内所有文件,在修改多个文件后只需要 git commit 一次就行了。

    现在每次 git commit 前都要用 git add 添加下文件,太烦了吧。还要先 git status 查看下修改了哪些文件,又添加了几个文件。

    又比如自动跟踪已 git add 过的文件,防止修改文件名后忘了 push 那个文件。

    我刚开始学 git 遇到的问题有点多。

    目前还不知道怎么查看仓库内的文件,百度找了半天没找到我要得。

    69 条回复    2019-01-23 11:21:42 +08:00
    dacapoday
        1
    dacapoday  
       2019-01-21 12:46:11 +08:00 via iPhone
    那就先用图形客户端呗,至少能熟悉功能。然后再看图形客户端的命令日志。
    wuyuanwei
        2
    wuyuanwei  
       2019-01-21 14:03:11 +08:00
    frylkrttj
        3
    frylkrttj  
    OP
       2019-01-21 14:35:26 +08:00
    @wuyuanwei “ git commit --all ”只能提交已“ git add ”过的文件呢。这样我目录内新添加的文件和修改文件名后的文件咋办呢。
    frylkrttj
        4
    frylkrttj  
    OP
       2019-01-21 14:36:09 +08:00
    @dacapoday 有什么图形客户端能显示当前操作用的是什么命令?
    Panway
        5
    Panway  
       2019-01-21 14:46:59 +08:00
    @frylkrttj SourceTree 菜单--查看--显示命令历史
    besto
        6
    besto  
       2019-01-21 15:08:24 +08:00
    首先 git add 是可以 add 目录的
    其次 git add 之后 你可以再更改, 这个时候提交只会提交你 add 那个点的版本.

    你这个需求明显不合理啊
    rocksolid
        7
    rocksolid  
       2019-01-21 15:22:26 +08:00
    git add .
    不就行了么 有什么麻烦的
    rocksolid
        8
    rocksolid  
       2019-01-21 15:23:06 +08:00
    或者直接用 vscode
    ddddad
        9
    ddddad  
       2019-01-21 15:32:17 +08:00   ❤️ 3
    lz 还没踩过提交错误的坑
    hjq98765
        10
    hjq98765  
       2019-01-21 15:36:57 +08:00
    我的感觉是,git 设置成这么个流程是有其中的深意的
    frye
        11
    frye  
       2019-01-21 15:39:00 +08:00   ❤️ 1
    git add .
    frylkrttj
        12
    frylkrttj  
    OP
       2019-01-21 15:47:33 +08:00
    看前面这么多回复差点又以为是自己笨了,幸好等来了 #11 @frye 的回复,才发现自己也没那么笨嘛,@frye 是真知道我在想什么啊。
    frylkrttj
        13
    frylkrttj  
    OP
       2019-01-21 15:49:57 +08:00
    现在好像只剩下,怎么实现自动跟踪文件名的问题了。
    quinoa42
        14
    quinoa42  
       2019-01-21 15:53:14 +08:00
    Untracked, stated 和 commited 是三种不同的状态,这么做自然有它的理由
    不过关于楼主的问题,不少 IDE 是支持自动 track 的,比如 Intellij
    但是我觉得这“智能”功能很烦,所以我一般都是关闭 IDE 的 git 相关功能的
    passerbytiny
        15
    passerbytiny  
       2019-01-21 16:25:01 +08:00
    @frylkrttj #13 文件名修改无解,必须 IDE 解决,纯命令行是 git rename,相当不方便,还容易漏(你要不用这命令,那文件改名后是 remove 和 add )。
    hash
        16
    hash  
       2019-01-21 17:07:26 +08:00
    按照楼主的描述似乎只需要写一个 alias?
    wuyuanwei
        17
    wuyuanwei  
       2019-01-21 18:01:04 +08:00
    @frylkrttj `git add .` 之前最好还是 `git status` 检查下状态,避免不必要的提交错误。通常我会配合 Facebook PathPicker 手动选择待暂存的文件。
    V2exUser
        18
    V2exUser  
       2019-01-21 18:04:20 +08:00 via Android
    idea 倒是会自动弹出是否自动加入 git 的窗口
    ww23xx
        19
    ww23xx  
       2019-01-21 19:10:26 +08:00 via Android
    (小姊姊我面向 V2EX 编程)
    chinvo
        20
    chinvo  
       2019-01-21 19:12:21 +08:00
    不是,这些简单问题,你 Google 一下好么

    再不济去微信上问那些大叔大爷啊 [:doge:]
    chinvo
        21
    chinvo  
       2019-01-21 19:13:13 +08:00
    shuizhengqi
        22
    shuizhengqi  
       2019-01-21 19:20:42 +08:00   ❤️ 1
    一看就是年轻人,没写过大项目
    stephen9357
        23
    stephen9357  
       2019-01-21 19:23:43 +08:00
    无脑 git add .早晚出事,我还是习惯 git status,然后挨个 git add,起码心里有数。
    hgjhgjgjhgjg
        24
    hgjhgjgjhgjg  
       2019-01-21 19:24:51 +08:00   ❤️ 1
    alias grb="git rebase"
    alias gaa="git add -A"
    alias gs="git status"
    alias gm="git commit"

    gaa
    gmm -m "xxx"


    楼主可以自定义一个 gam 试试看。
    des
        25
    des  
       2019-01-21 19:25:57 +08:00 via Android
    不是 command + k,然后选自己要提交的文件和变化么?
    frankkai
        26
    frankkai  
       2019-01-21 19:47:29 +08:00
    git ac
    tomoya92
        27
    tomoya92  
       2019-01-21 20:01:03 +08:00 via iPhone
    我更想知道 git 提交怎么不用输入后面的-m
    每次提交都要写一下-m "update"
    imherer
        28
    imherer  
       2019-01-21 20:08:40 +08:00
    用带图形界面的客户端,比如 SourceTree、Github Desktop 等都可以

    但是建议楼主最好别这样做,不出事还好,出事就麻烦了
    ooops
        29
    ooops  
       2019-01-21 20:23:22 +08:00
    @tomoya92 写个 alias
    ooops
        30
    ooops  
       2019-01-21 20:27:53 +08:00
    多用用就没有这些问题了。建议从头到尾看看 Pro Git。有问题看到后面就慢慢懂了。我看了半天问题不知道楼主想干啥。
    gesse
        31
    gesse  
       2019-01-21 20:35:54 +08:00
    你可能对 git 有什么误解
    frylkrttj
        32
    frylkrttj  
    OP
       2019-01-21 20:54:26 +08:00
    @hash 我想知道能不能通过配置文件解决。alias 是指什么?
    frylkrttj
        33
    frylkrttj  
    OP
       2019-01-21 20:55:29 +08:00
    @ww23xx #19 哈哈
    frylkrttj
        34
    frylkrttj  
    OP
       2019-01-21 20:56:53 +08:00
    @chinvo #20 银行卡都没有没条件上 google。
    frylkrttj
        35
    frylkrttj  
    OP
       2019-01-21 20:58:32 +08:00
    @stephen9357 我刚学 git 需要反复操作 正需要 git add . 编程做项目离我还远。
    frylkrttj
        36
    frylkrttj  
    OP
       2019-01-21 21:01:22 +08:00
    @hgjhgjgjhgjg #24 你这配置是写在那个文件的,gam 又是什么。
    fan123199
        37
    fan123199  
       2019-01-21 21:08:13 +08:00
    git add folder/* && git commit -m "all file in folder updated" && git push 一条龙, 个人开发没问题。
    frylkrttj
        38
    frylkrttj  
    OP
       2019-01-21 21:09:25 +08:00
    @tomoya92 #27 发到 V2EX -m 之后就这里省略了吧
    mingyun
        39
    mingyun  
       2019-01-21 23:05:17 +08:00
    @chinvo 又见这个网站,哈哈
    frienmo
        40
    frienmo  
       2019-01-21 23:09:02 +08:00
    @hgjhgjgjhgjg 握手
    看我的
    ##############Git############
    #alias git='LANG=en_US git'
    alias gl='git log'
    alias gs='git status'
    alias gfp='git fetch -p'
    alias gcm='git checkout master'
    alias gc-='git checkout -'
    alias gcp='git cherry-pick'
    alias gau='git add -u'
    alias gpm='git pull origin master'
    alias gnb='function _gnb { gcm; gpm ; git checkout -b $1 ;echo $1;}; _gnb'
    alias amend='git add -u;git commit --amend --no-edit'
    alias gr='function _gr()
    { re='^[0-9]+$';
    if [[ $1 =~ $re ]] ; then
    git rebase -i HEAD~$1;
    else
    git rebase -i $1;
    fi;};_gr'
    alias gz='git reset HEAD~1'
    alias delete-merged-branches='function _f { git checkout --quiet master && git branch --merged | grep --invert-match '\\*' | xargs -n 1 git branch --delete; git checkout --quiet @{-1}; }; _f'
    ynyounuo
        41
    ynyounuo  
       2019-01-22 02:55:46 +08:00 via iPhone
    如果你的工作流只是
    git add .
    git commit -m "{some_useless_info}"
    git push

    那你基本就是在浪费时间骗自己在用 git 而已
    建议 rm -rm .git/ 一劳永逸
    ynyounuo
        42
    ynyounuo  
       2019-01-22 02:56:10 +08:00 via iPhone
    rf*
    SharkIng
        43
    SharkIng  
       2019-01-22 06:07:48 +08:00
    初学者这样用倒是可以,我以前也这么用,但是的确像楼上说的问题很多。当你真正做项目后,或者在公司里用的时候就会明白这样不行的。所以刚开始养好习惯比较好,不要怕麻烦。
    frylkrttj
        44
    frylkrttj  
    OP
       2019-01-22 07:39:44 +08:00
    @ynyounuo #41 现在学的能用的只有这三步了,你说说其他应用场景呗。
    frylkrttj
        45
    frylkrttj  
    OP
       2019-01-22 07:45:17 +08:00
    #25 @des 没百度到 git -k 相关的
    Wolther47
        46
    Wolther47  
       2019-01-22 07:49:14 +08:00 via iPhone
    @frylkrttj #45 他说的可能是 IDE 里面的快捷键
    Wolther47
        47
    Wolther47  
       2019-01-22 07:55:45 +08:00 via iPhone
    我觉的楼上有几位言过了,一开始用 git,还是先以熟悉为目的,反正也不是非常重要的代码,翻车了才能更好的记住(
    hakono
        48
    hakono  
       2019-01-22 08:35:59 +08:00 via Android   ❤️ 1
    嘻嘻,等楼主开发程序后,试着多用几次 git add *就会发现,咦,这次把一堆不在 ignore 名单里的临时文件提交了。
    下次:卧槽把刚刚创建的带服务器帐号密码的配置文件一并提交 push 到 github 了。
    然后楼主开始想着怎么回滚,怎么操作远程仓库,然后学会了
    git push --force
    然后把推送的坑也踩了一遍 233
    james2013
        49
    james2013  
       2019-01-22 08:38:45 +08:00   ❤️ 1
    直接用图形化工具 TortoiseGit.
    丰富的功能,直接用鼠标点击就可以了.
    1 个命令也不需要输入.
    dajj
        50
    dajj  
       2019-01-22 08:55:20 +08:00
    脚本。。。
    des
        51
    des  
       2019-01-22 08:59:42 +08:00 via Android
    @hakono
    多添加了的 reset 回来就好了,文件多的话我也这样,不过不是 add . 而是 add path
    开始不熟,踩几次坑就会长记性了
    hakono
        52
    hakono  
       2019-01-22 09:14:01 +08:00 via Android
    @des
    主要很无脑 add 的话,多时候都是 add commit push 三件套
    然后回过头就才发现远程仓库已经塞入了多余的文件,
    这时候操作远程对新手就是个大坑了,然后这时候通过各方百度,很大几率会学会 git rest --hard 和 git push --force 这两个命令。
    ElfenSterben
        53
    ElfenSterben  
       2019-01-22 09:25:52 +08:00
    你把 gitignore 配置好然后 git add . 有什么问题么?
    flyingghost
        54
    flyingghost  
       2019-01-22 09:36:15 +08:00
    新手学习过程中看不到风险很正常。提出优化建议起码证明 lz 进一步思考了。

    但 git 不这样设计不是因为 git 蠢,而是因为这样设计是错的:误提交实在是太多太多了。。。

    亲身经历过同事误把 密钥.java.bak 提交进仓库,打包,发布,被竞争对手反编译,获取到公司通用算法和我部门密钥,暗搓搓上线我司在线服务的破解版,然后全部门在过年前一天飞机火车汽车逆流回司加班的壮丽事件。
    日常岁月静好的代码仓库,也时不时会出现不应当提交的文件。所以需要 code review,需要服务端 commit 钩子,需要定期检查清理。

    单就文件的尺度来说,git/svn 是允许你整体提交的,也就是说你无需手动一个个变更点看过来,一把梭提交整个文件。是不是和“提交整个目录”很像?所以 git 不是没想到,而是在方便和危险之间找到了平衡:文件粒度。
    但我要求的最佳实践,依然是提交的时候检查精确到行,每个变更都确认需要提交。(你看我没有要求精确到字符已经很人性化很方便啦!)
    liu19931020
        55
    liu19931020  
       2019-01-22 10:12:17 +08:00
    vscode+1
    frylkrttj
        56
    frylkrttj  
    OP
       2019-01-22 10:16:38 +08:00
    @hakono #47 哈哈
    @ElfenSterben #53 似乎看穿了我下一步准备干什么
    @flyingghost #54 感谢掏心窝的回复
    xxgirl2
        57
    xxgirl2  
       2019-01-22 10:31:59 +08:00
    先 status,然后 diff,检查文件、格式、修改无误后,再 add。
    omph
        58
    omph  
       2019-01-22 10:37:31 +08:00
    自己写个驻留程序 daemon,监控目录中文件变动,自动添加即可。当然最好支持过滤功能
    libook
        59
    libook  
       2019-01-22 10:37:59 +08:00
    用 Git 养成好习惯是头等重要的,用时的一点点麻烦,是为了避免解决问题时的恶心。

    “自动跟踪”坑很多,比如提交了并不想提交的文件(临时测试修改的代码等),以后用用就知道还是老老实实 diff 再 add 最稳妥,版本控制工具使用来可靠控制代码版本的,不应该是累赘,觉得用起来很麻烦真不如不用。

    团队合作使用 git commit -a 和 git push --force 等指令,会被人打死。
    omph
        60
    omph  
       2019-01-22 10:39:41 +08:00
    和通知功能
    karllynn
        61
    karllynn  
       2019-01-22 10:41:34 +08:00
    这种简单问题,你读一下 git 文档不就行了么。。。
    xio
        62
    xio  
       2019-01-22 10:48:32 +08:00
    ```bash
    function gitall() {
    git add . -A
    if [ -n "$1" ]; then
    git commit -m "$1"
    else
    git commit -m "update"
    fi
    git push
    }

    alias gacp="gitall"
    ```
    weixiangzhe
        63
    weixiangzhe  
       2019-01-22 13:34:08 +08:00
    我一般快速提交是这样的
    gaa && gc -m 'msg'
    gaby2018
        64
    gaby2018  
       2019-01-22 14:43:18 +08:00
    楼主应该是 svn 用多了,git 区别还是挺大
    halk
        65
    halk  
       2019-01-22 17:17:23 +08:00
    git add -u
    msg7086
        66
    msg7086  
       2019-01-22 22:31:58 +08:00
    顺路说一句,学 Git (项目管理)和学 Git (命令行)是两回事。
    你说你学 Git,可以先想想你要学其中的哪一个,还是两个都要。
    我还是建议找个好点的 GUI。
    msg7086
        67
    msg7086  
       2019-01-22 22:32:36 +08:00
    @libook 不过我司是频繁使用 git push --force 的。
    guanhui07
        68
    guanhui07  
       2019-01-23 11:09:58 +08:00
    git add .
    kaiser1992
        69
    kaiser1992  
       2019-01-23 11:21:42 +08:00
    git add -A
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2949 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:32 · PVG 08:32 · LAX 16:32 · JFK 19:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.