小编Ken*_*awa的帖子

Windows中的Git符号链接

我们的开发人员使用基于Windows和Unix的操作系统.因此,在Unix机器上创建的符号链接成为Windows开发人员的问题.在windows(msysgit)中,符号链接将转换为文本文件,其中包含指向其所指向文件的路径.相反,我想将符号链接转换为实际的Windows符号链接.

我需要的(更新的)解决方案是:

  • 编写一个post-checkout脚本,以递归方式查找"symlink"文本文件.
  • 将它们替换为具有与虚拟"symlink"相同名称和扩展名的windows符号链接(使用mklink)
  • 通过在.git/info/exclude中添加条目来忽略这些windows符号链接

我没有实现这个,但我相信这是解决这个问题的可靠方法.

问题:

  1. 你对这种方法有什么不利之处呢?
  2. 这个结账后脚本是否可以实现?即我可以递归地找出git创建的虚拟"符号链接"文件吗?
  3. 有没有人已经在这样的脚本上工作过?

windows git symlink

227
推荐指数
11
解决办法
9万
查看次数

git diff重命名文件

我有一个文件a.txt.

cat a.txt
> hello
Run Code Online (Sandbox Code Playgroud)

内容a.txt是"你好".

我做了一个提交.

git add a.txt
git commit -m "first commit"
Run Code Online (Sandbox Code Playgroud)

然后我a.txt进入了一个test目录.

mkdir test
mv a.txt test
Run Code Online (Sandbox Code Playgroud)

然后我做了第二次提交.

git add -A
git commit -m "second commit"
Run Code Online (Sandbox Code Playgroud)

最后,我编辑a.txt说"再见".

cat a.txt
> goodbye
Run Code Online (Sandbox Code Playgroud)

我做了最后一次提交.

git add a.txt
git commit -m "final commit"
Run Code Online (Sandbox Code Playgroud)

现在这是我的问题:

如何区分a.txt上次提交和第一次提交之间的内容?

我试过了 git diff HEAD^^..HEAD -M a.txt,但是那没用. git log --follow a.txt正确检测重命名,但我找不到相应的git diff.有吗?

git diff rename

99
推荐指数
3
解决办法
2万
查看次数

没有ssl的npm安装

我有一个Ubuntu虚拟机无法连接到具有ssl的站点,即https.如果网址以http开头,它可以成功地从互联网上下载工件.

npm install将通过https下载依赖项.反正是否通过http下载?

ssl node.js npm

56
推荐指数
3
解决办法
5万
查看次数

git update-index --assume-unchanged和git reset

这是场景:

在我的工作目录中,我有许多我编辑过的文件(我们称之为A,B,C).然后我跑git update-index --assume-unchanged了那些文件.现在git status返回空白.好.

现在,如果我这样做git reset --hard,文件A,B和C的内容在我编辑它们之前还原为内容并且"假设 - 不变"它们.

有没有办法阻止git实际还原文件A,B和C,并简单地忽略它们?

谢谢,

git reset

38
推荐指数
1
解决办法
1万
查看次数

用原始代码替换所有符号链接

我有以下目录结构

/symdir
  sym1 -> ../dir1
  sym2 -> ../dir2
  hello.txt
Run Code Online (Sandbox Code Playgroud)

然后

/dir1
  some
  files
  here
/dir2
  more
  files
Run Code Online (Sandbox Code Playgroud)

我想将symdir(sym1,sym2)中的符号链接替换为原始符号.即

some_awesome_bash_func symdir symdir_output
Run Code Online (Sandbox Code Playgroud)

会创造

/symdir_output
  /dir1
    some
    files
    here
  /dir2
    more
    files
  hello.txt
Run Code Online (Sandbox Code Playgroud)

我怎么做到这一点?

bash symlink

28
推荐指数
5
解决办法
2万
查看次数

Egit挂钩不会被触发

我有一个带有预提交钩子的git repo,它故意在100%的时间内失败.

cat .git/hooks/pre-commit
> exit 1
Run Code Online (Sandbox Code Playgroud)

如果我尝试通过命令行提交,它会按预期失败.但是,如果我从egit提交,则忽略钩子并且提交更改.

egit/jgit不能识别挂钩吗?这有解决方法吗?

提前致谢!

git githooks egit jgit

17
推荐指数
1
解决办法
5649
查看次数

git日志历史简化

假设我有以下历史

        D---E-------F
       /     \       \
      B---C---G---H---I---J
     /                     \
    A-------K---------------L--M
Run Code Online (Sandbox Code Playgroud)

git log --ancestry-path D..M会给我

            E-------F
             \       \
              G---H---I---J
                           \
                            L--M
Run Code Online (Sandbox Code Playgroud)

但是,我想要以下几点

            E
             \       
              G---H---I---J
                           \
                            L--M
Run Code Online (Sandbox Code Playgroud)

要么

            E-------F
                     \
                      I---J
                           \
                            L--M
Run Code Online (Sandbox Code Playgroud)

从本质上讲,我只想走一条路,而不是两条路.

这可能吗?如果是这样,命令是什么?

编辑:

我尝试过使用--first-parent,但事实并非如此.git log - 第一父母G..M给了我

                    F
                     \
                  H---I---J
                           \
                            L--M
Run Code Online (Sandbox Code Playgroud)

它包括F,因为F是I的第一个父母.相反,我喜欢

                  H---I---J
                           \
                            L--M
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激

解决方案(对我有用):

正如@VonC所说的那样,没有一个单线程可以做到这一点.所以我最终使用了一个bash脚本.

  1. 对于'git log --ancestry-path G..M'中的每个提交
  2. 确定$ commit的父级是否包含我们之前的提交
  3. 如果是,请继续.做一些有趣的事.
  4. 如果不是,请跳过该提交.

例如,git log --first-commit G..M是

H - F - I - J - L - M
Run Code Online (Sandbox Code Playgroud)

然而,F的父母是E,而不是H.所以我们省略F,给我

H - I - J - …
Run Code Online (Sandbox Code Playgroud)

git logging history

14
推荐指数
1
解决办法
4056
查看次数

禁用Git重命名检测

  1. 我有一个文件, foo.txt
  2. 创建并签出分支'branch_A'
  3. git mv foo.txt bar.txt其次git add -Agit commit -m "renamed foo.txt"
  4. 结账大师, git checkout master
  5. 删除foo.txt并提交.
  6. 现在合并branch_A, git merge branch_A

有了这个,我得到一个合并冲突(重命名/删除).

CONFLICT (rename/delete): Rename foo.txt->bar.txt in branch_A and deleted in HEAD
Run Code Online (Sandbox Code Playgroud)

这是有道理的,也是我所期待的.但是,我想知道git merge是否有办法检测重命名,而是将它们视为添加/删除.在这种情况下,我希望git能够检测到foo.txt已被删除,只需添加bar.txt即可.没有冲突.

我尝试过使用-X rename-threshold,但它对我没用.我已经尝试过阈值0和120(高于100的数字).我错过了什么?

谢谢!

PS我也遇到了error: refusing to lose untracked file at...错误.这是什么意思?

git merge rename

9
推荐指数
2
解决办法
8490
查看次数

git jenkins高级功能

我们的团队使用jenkins和git.我们正在寻求实现git插件的高级功能,该功能允许在将提交提交到受祝福的存储库之前进行预构建.请参阅https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin-AdvancedFeatures

但是,我无法理解整个过程.

这是一段摘录:

设置Jenkins项目,并将Git SCM中的"分支"字段留空.这将导致Jenkins考虑对任何分支进行任何更改以进行构建.

接下来,选择一个特定的分支名称作为"高级"部分中的集成目标 - (例如"master"或"stable"),然后选择"构建前合并".

从构建后操作中选择"将GIT标记推回原始存储库"(这需要使用构建结果更新集中式git存储库).

现在,开发人员不应该直接提交到您的集成分支('master'或'stable').相反,他们应该使用功能分支,或者在提交时创建新的远程分支(例如:"git push origin HEAD:refs/heads/myNewFeature").您还可以将GIT存储库设置为仅接受来自Jenkins的集成分支的提交.

你完成了.提交现在应该自动与集成分支合并(如果它们没有干净地合并,它们将失败)并构建.如果构建成功,则合并的结果将被推回到远程git存储库.

我的理解是,

  1. 开发人员创建了远程分支,jenkins将从中分支
  2. jenkins将分支与其集成分支合并并构建
  3. 如果构建成功,则合并将被推送到blessed-repo/master.

问题是,如果构建失败,那么集成分支的状态是什么?我只假设它以某种方式恢复到合并之前的提交.如果没有,那么集成分支将保持合并打破构建,使得其他分支无法合并和构建.

这是真的?不幸的是,它从维基不清楚.

另外,有谁知道我可以看一个例子?

git jenkins

9
推荐指数
1
解决办法
7051
查看次数

git diff唯一合并提交

说我有,

      A topic
     / \
D---E---F master
Run Code Online (Sandbox Code Playgroud)

通过这样做,我可以很容易地得到DE的差异

git diff D..E --name-status
Run Code Online (Sandbox Code Playgroud)

和EF,EA一样.

提交F是一个合并提交,并说它有冲突.通过修改foo.bar解决了这个问题.foo.bar被添加了git,然后提交了合并提交.合并冲突得到了解决.

现在foo.bar的更改仅存在于commit F中.如何获得该差异?

有没有办法获得在合并提交中唯一引入的文件差异?

git diff merge commit

8
推荐指数
1
解决办法
1697
查看次数

标签 统计

git ×8

diff ×2

merge ×2

rename ×2

symlink ×2

bash ×1

commit ×1

egit ×1

githooks ×1

history ×1

jenkins ×1

jgit ×1

logging ×1

node.js ×1

npm ×1

reset ×1

ssl ×1

windows ×1