|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +title: "Git测验(A卷)" |
| 4 | +--- |
| 5 | + |
| 6 | +在深圳做Git培训和项目管理软件实施,这是一份Git培训的测验题,通过率不高。因为不合格的还要重考,答案就不公布了。 |
| 7 | + |
| 8 | +### 单项选择题 ### |
| 9 | + |
| 10 | +1. 如果提示提交内容为空、不能提交,则最为合适的处理方式是:_____ |
| 11 | + |
| 12 | + a) 执行 ``git status`` 查看状态,再执行 ``git add`` 命令选择要提交的文件,然后提交。 |
| 13 | + |
| 14 | + b) 执行 ``git commit --allow-empty`` ,允许空提交。 |
| 15 | + |
| 16 | + c) 执行 ``git commit -a`` ,提交所有改动。 |
| 17 | + |
| 18 | + d) 执行 ``git commit --amend`` 进行修补提交。 |
| 19 | + |
| 20 | +2. 如果把项目中文件 ``hello.c`` 的内容破坏了,如何使其还原至原始版本? _____ |
| 21 | + |
| 22 | + a) ``git reset -- hello.c`` |
| 23 | + |
| 24 | + b) ``git checkout HEAD -- hello.c`` |
| 25 | + |
| 26 | + c) ``git revert hello.c`` |
| 27 | + |
| 28 | + d) ``git update hello.c`` |
| 29 | + |
| 30 | +3. 修改的文档 ``meeting.doc`` 尚未提交,因为错误地执行了 ``git reset --hard`` 导致数据丢失。丢失的数据能找回么? _____ |
| 31 | + |
| 32 | + a) 不能。执行硬重置使工作区文件被覆盖,导致数据丢失无法找回。 |
| 33 | + |
| 34 | + b) 能。可以通过 ``git checkout HEAD@{1} -- meeting.doc`` 找回。 |
| 35 | + |
| 36 | + c) 不确定。如果在重置前执行了 ``git add`` 命令将 ``meeting.doc`` 加入了暂存区,则可以在对象库中处于悬空状态的文件中找到。 |
| 37 | + |
| 38 | + d) 不能。因为未提交所以无法找回。 |
| 39 | + |
| 40 | +4. 仅将工作区中修改的文件添加到暂存区(新增文件不添加),以备提交,用什么命令标记最快? _____ |
| 41 | + |
| 42 | + a) ``git add -A`` |
| 43 | + |
| 44 | + b) ``git add -p`` |
| 45 | + |
| 46 | + c) ``git add -i`` |
| 47 | + |
| 48 | + d) ``git add -u`` |
| 49 | + |
| 50 | +5. 下面哪一个命令 **不** 会改变提交历史? _____ |
| 51 | + |
| 52 | + a) ``git reset --hard HEAD~1`` |
| 53 | + |
| 54 | + b) ``git checkout HEAD^^ .`` |
| 55 | + |
| 56 | + c) ``git rebase -i HEAD^^`` |
| 57 | + |
| 58 | + d) ``git commit --amend`` |
| 59 | + |
| 60 | +6. 我使用和其他人不一样的IDE软件,总是在目录下生成以 ``.xx`` 为后缀的临时文件。如何避免由于自己的误操作导致此类文件被添加到版本库中呢? _____ |
| 61 | + |
| 62 | + a) 执行 ``git clean -f`` 删除临时性文件。 |
| 63 | + |
| 64 | + b) 向版本库中添加一个 ``.gitignore`` 文件,其中包含一条内容为 ``*.xx`` 的记录。 |
| 65 | + |
| 66 | + c) 在文件 ``.git/info/exclude`` 中添加一条内容为 ``*.xx`` 的记录。 |
| 67 | + |
| 68 | + d) 更换另外一款IDE软件。 |
| 69 | + |
| 70 | +7. 项目跨平台导致文件中的换行符不一致。其中有 Linux 格式换行符(0A),也有DOS格式换行符(0D 0A)。要如何避免此类情况呢? _____ |
| 71 | + |
| 72 | + a) 修改 ``/etc/gitattributes`` 文件,在其中包含一条内容为 ``* text=auto`` 的设置。 |
| 73 | + |
| 74 | + b) 执行命令 ``git config --global core.autocrlf true`` 。 |
| 75 | + |
| 76 | + c) 执行命令 ``git config --global core.autocrlf input`` 。 |
| 77 | + |
| 78 | + d) 向版本库中添加一个 ``.gitattributes`` 文件,在其中包含一条内容为 ``* text=auto`` 的设置。 |
| 79 | + |
| 80 | +8. 下列对于版本库授权说法正确的是:_____ |
| 81 | + |
| 82 | + a) 可以为分支或路径设置不同的写入权限,但不能设置不同的读取权限。 |
| 83 | + |
| 84 | + b) 除管理员外,版本库的创建者都可以为自己创建的版本库授权。 |
| 85 | + |
| 86 | + c) 只要通过授权后,便不能限制所推送的提交的署名作者,可以是任何人。 |
| 87 | + |
| 88 | + d) 如果没有向版本库的写入权限,就一定没有读取权限。 |
| 89 | + |
| 90 | +9. 取消服务器版本库中ID为 ``a2387`` 的提交,而且不能引起历史提交的变更,用什么操作? _____ |
| 91 | + |
| 92 | + a) ``git rebase -i a2387^`` |
| 93 | + |
| 94 | + b) ``git checkout a2387^ -- .`` |
| 95 | + |
| 96 | + c) ``git revert a2387`` |
| 97 | + |
| 98 | + d) ``git reset --hard a2387^`` |
| 99 | + |
| 100 | +10. 从版本库中的历史提交中彻底移除ID为 ``a2387`` 的提交,用什么操作? _____ |
| 101 | + |
| 102 | + a) ``git reset --hard a2387^`` |
| 103 | + |
| 104 | + b) ``git checkout a2387^ -- .`` |
| 105 | + |
| 106 | + c) ``git revert a2387`` |
| 107 | + |
| 108 | + d) ``git rebase --onto a2387^ a2387 HEAD`` |
| 109 | + |
| 110 | +11. 所有改动的文件都已加入暂存区,若希望将其中的 ``other.py`` 文件下次再提交,如何操作? _____ |
| 111 | + |
| 112 | + a) ``git reset -- other.py`` |
| 113 | + |
| 114 | + b) ``git checkout -- other.py`` |
| 115 | + |
| 116 | + c) ``git checkout HEAD other.py`` |
| 117 | + |
| 118 | + d) ``git reset --hard -- other.py`` |
| 119 | + |
| 120 | +12. 若产品的版本号显示为 ``1.7.10.rc0-33-g9678d-dirty`` ,可以判断出此版本号是如何生成的么? _____ |
| 121 | + |
| 122 | + a) ``git tag`` |
| 123 | + |
| 124 | + b) ``git describe --tags --always --dirty`` |
| 125 | + |
| 126 | + c) ``git name-rev HEAD`` |
| 127 | + |
| 128 | + d) ``git --version`` |
| 129 | + |
| 130 | +13. 关于 ``git clone`` 下面说法 **错误** 的是:_____ |
| 131 | + |
| 132 | + a) 克隆时所有分支均被克隆,但只有HEAD指向的分支被检出。 |
| 133 | + |
| 134 | + b) 可以通过 ``git clone --single-branch`` 命令实现只克隆一个分支。 |
| 135 | + |
| 136 | + c) 克隆出的工作区中执行 ``git log`` 、 ``git status`` 、 ``git checkout`` 、 ``git commit`` 等操作不会去访问远程版本库。 |
| 137 | + |
| 138 | + d) 克隆时只有远程版本库HEAD指向的分支被克隆。 |
| 139 | + |
| 140 | +14. 关于删除分支 ``XX`` ,下列说法正确的是: _____ |
| 141 | + |
| 142 | + a) 执行 ``git push origin :XX`` 来删除远程版本库的 ``XX`` 分支。 |
| 143 | + |
| 144 | + b) 执行 ``git branch -D XX`` 删除分支,总是能成功。 |
| 145 | + |
| 146 | + c) 远程版本库删除的分支,在执行 ``git fetch`` 时本地分支自动删除。 |
| 147 | + |
| 148 | + d) 本地删除的分支,执行 ``git push`` 时,远程分支亦自动删除。 |
| 149 | + |
| 150 | +15. 下面的操作中哪一个不能确认维护分支 ``maint`` 上所有的 bugfix 提交均已合并至当前分支 ``master`` 中。 _____ |
| 151 | + |
| 152 | + a) ``git rev-list ..maint`` 的输出为空。 |
| 153 | + |
| 154 | + b) 在 ``maint`` 分支成功地执行 ``git merge master`` 。 |
| 155 | + |
| 156 | + c) ``git log ..maint`` 的输出为空。 |
| 157 | + |
| 158 | + d) 新版本发布,在 ``maint`` 分支执行 ``git merge --ff-only master`` 成功。 |
| 159 | + |
| 160 | +16. 一个图片文件 ``logo.png`` 冲突了,如何取出他人的版本。 _____ |
| 161 | + |
| 162 | + a) ``git show :1:./logo.png > logo.png-theirs`` |
| 163 | + |
| 164 | + b) ``git show :2:./logo.png > logo.png-theirs`` |
| 165 | + |
| 166 | + c) ``git show :3:./logo.png > logo.png-theirs`` |
| 167 | + |
| 168 | + d) ``git show :0:./logo.png > logo.png-theirs`` |
| 169 | + |
| 170 | +17. 工作在特性分支,常常因为执行 ``git push`` 默认推送所有本地和远程共有分支,导致非当前分支报告 non-fast-forward 错误。如果设置只推送当前分支可避免此类问题。下面操作正确的是:_____ |
| 171 | + |
| 172 | + a) ``git config --global push.default upstream`` |
| 173 | + |
| 174 | + b) ``git config --global pull.rebase true`` |
| 175 | + |
| 176 | + c) ``git config --global receive.denyDeletes true`` |
| 177 | + |
| 178 | + d) ``git config --global pager.status true`` |
| 179 | + |
| 180 | +18. 关于对象库(.git/objects)说法 **错误** 的是:_____ |
| 181 | + |
| 182 | + a) 两个内容相同文件名不同的文件,在对象库中仅有一个拷贝。 |
| 183 | + |
| 184 | + b) 对象库执行 ``git gc`` 操作后,reflog 会被清空导致其中记录的未跟踪提交及指向的文件被丢弃。 |
| 185 | + |
| 186 | + c) 删除文件后,再通过添加相同文件找回,不会造成版本库的冗余。 |
| 187 | + |
| 188 | + d) 对象库并非一直保持最优存储,而是通过周期性地执行 ``git gc`` 优化版本库。 |
| 189 | + |
| 190 | +19. 关于子模组 **错误** 的说法是:_____ |
| 191 | + |
| 192 | + a) 克隆父版本库,默认不会克隆子模组版本库。 |
| 193 | + |
| 194 | + b) 子模组可以嵌套。执行 ``git submodule update --recursive`` 可对嵌套子模组进行更新。 |
| 195 | + |
| 196 | + c) 子模组和父版本库的新提交,要先推送父版本库,后推送子模组。 |
| 197 | + |
| 198 | + d) 子模组检出处于分离头指针状态(gitlink的指向),在子模组中工作需要手动切换分支。 |
| 199 | + |
| 200 | +20. 当一个提交说明显示为 ``souce code refactor (fix #529)`` ,下面哪个说法是正确的? _____ |
| 201 | + |
| 202 | + a) 这个提交只是代码重构,并未修复任何东西,因此没有改变版本库的提交历史。 |
| 203 | + |
| 204 | + b) 这个提交修正了第529号提交,没有改变版本库的提交历史。 |
| 205 | + |
| 206 | + c) 这个提交撤销了第529号提交,改变了版本库的提交历史。 |
| 207 | + |
| 208 | + d) 这个提交和项目的缺陷跟踪平台(如Redmine)关联,并会更新相关问题的状态。 |
| 209 | + |
| 210 | + |
| 211 | +---- |
| 212 | + |
| 213 | +[gotgit/git-po-zh_CN]: https://github.com/gotgit/git-po-zh_CN/ |
0 commit comments