最近我一直在使用 git stash 很多次,我一直在想它真的很慢,即使在一个只有一个文件的新存储库上也是如此。我读过这个问题,大约GIT中藏匿缓慢而这另一个而想尽回答这些问题,但没有任何实际工作。
例如,我已经完成了以下步骤来重现它:
git init
touch file.txt
vim file.txt
(编辑文件添加 2 行)git add .
git commit -m "Initial commit"
vim file.txt
(再次编辑添加1行)time git stash
输出:
$ time git stash
Saved working directory and index state WIP on master: b9454ed Initial commit
HEAD is now at b9454ed Initial commit
real 0m8.042s
user 0m0.000s
sys 0m0.046s
Run Code Online (Sandbox Code Playgroud)
8 秒存储一条线的时间太长了。现在使用 libgit2sharp 进行测试:
static void Main(string[] args)
{
Repository repo=new Repository(@"C:\Users\UserTest\TestGitRepo");
repo.Stashes.Add(new Signature("test", "test@test.com", new DateTimeOffset(DateTime.Now)), "Stash …
Run Code Online (Sandbox Code Playgroud) 我有一个项目有 mercurial HG 代码源管理,并尝试在 VSTS/Git 平台上迁移它。
我读到有一个工具可以做到这一点,“快速导出”......所以我尝试但没有实现在Windows中工作......
假设我已经D:\MyProject
包含.hg
目录和项目代码文件,我
fast-export
“D:\fast-export-master”文件夹中的文件,D:\MyProject-git
D:\MyProject-git
该git init
命令中启动(.git
然后出现一个新目录);D:\MyProject-git
我做的一样..\fast-export-master\hg-fast-export.sh -r "D:\MyProject"
现在奇怪的事情开始发生了,一个命令行窗口出现和消失的如此之快我不明白发生了什么,所以我重新启动了之前的命令希望看到消息......我应该尝试几十次直到能够捕获printscreen 命令行消息,上面写着奇怪的事情:
其中: (/c/Users/xxx/bin:mingw64/bin:/user/local/bin:/usr/bin:/bin/mingw64) 中没有 D:\fast-export-master\hg-fast-export.sh /bin:/usr/bin:/c/Users/xxx/bin:/c/ProgramData/Oracle/Java/javapath:/c/WINDOWS/system32 [...etc...etc...] )
我想知道是什么问题以及如何解决它...
编辑:
按照下面的@max630 建议,我重新安装了 Python 并更新了 PATH,以便在命令中识别它
> python
Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Run Code Online (Sandbox Code Playgroud)
从开始菜单打开“GIT Bash”然后
cd "/D/MyProject-git"
../fast-export-master/hg-fast-export.sh -r …
Run Code Online (Sandbox Code Playgroud) 我最近遇到了一个问题,我无法将更改推送到我作为另一个用户克隆的存储库中,该存储库是我在桌面上的 git 中推送的第一个用户。
基本上是这样的
尝试将更改推送到 repo 并收到原始用户名没有权限的错误,即使这是使用第二个用户,更具体地说是 ssh 密钥克隆的。
清除 Windows 凭据管理器中的 git 条目并没有解决这个问题。
清除全局用户名和电子邮件未解决此问题
我终于能够使用以下方法推送我的更改:
GIT_SSH_COMMAND="ssh -i <path to private ssh key for second user>" git push
Run Code Online (Sandbox Code Playgroud)
我将这个帖子发布给遇到此问题的其他人,并提出一些问题,
我知道这个命令本质上是指定 ssh 连接在推送时使用的密钥,但是如果使用相同的身份文件克隆这个密钥,为什么还没有针对它?
是否有其他替代方法或更好的方法,而不是像手动更改配置值或从 Windows 凭据管理器中删除条目那样繁琐的工作?
因此,目标是将更改推送到多个 github 帐户,而无需执行诸如临时指定要使用的 ssh 密钥之类的操作。
使用 git for windows (git-scm.com) 和脚本,我可以让 Bash 停止询问密码,但我似乎无法从 git GUI 中删除密码提示。
远程的 url 正在使用 ssh 链接(见下文),所以我很确定这不是问题。但我不是 git 或 SSH 专家。
git@gitlab.com:repo
Run Code Online (Sandbox Code Playgroud)
已使用提供的密码创建 SSH 密钥 (ED25519),并将公钥添加到托管帐户。SSH 密钥存储在典型位置C:\Users\<user>\.ssh\id_ed25519
。Help->Show SSH Key
在 GUI 中单击时,它会显示我正在使用的 ssh 密钥。ssh-agent 正在后台运行,并且 ssh 密钥已通过以下设置添加到 ssh-agent。
设置 ssh-agent 我使用了这里提供的代码(复制并粘贴在下面以供参考).bashrc
在C:\Users\<user>
路径下创建文件。一切似乎都在 bash 提示符下按预期运行,但在 Git GUI 下却没有。
env=~/.ssh/agent.env
agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
agent_start () {
(umask 077; ssh-agent >| "$env")
. "$env" >| /dev/null …
Run Code Online (Sandbox Code Playgroud) 我刚刚在新的 Windows 10 计算机(Win 10 Enterprise)上安装了适用于 Window 版本 2.18.0 64 位的 Git。
当我在资源管理器中右键单击并选择“Git Bash Here”或“Git Gui Here”时,我看到弹出“找不到应用程序”错误。
更新
我找到了这个答案,它几乎帮助我找到了问题和解决方案。
我regedit
可以看到它HKEY_CURRENT_USER\Software\Classes\Directory\shell\git_shell\command
指向我的用户文件夹,而不是 git 的实际位置:
对于“Git Bash Here”,我将值更改为"C:\Program Files (x86)\Git\git-bash.exe" "--cd=%1"
同样,对于“Git GUI here”,我将值更改HKEY_CURRENT_USER\Software\Classes\Directory\shell\git_gui\command
为"C:\Program Files (x86)\Git\cmd\git-gui.exe" "--working-dir" "%1"
但是,我仍然看到“找不到应用程序”错误。任何想法如何解决这一问题?
我已使用此处定义的命令行方法将我的 git-for-windows 安装更新/升级到git 版本 2.19.1.windows.1。
原来的安装文件夹是直接在
C:\用户\MY_UNAME
我想从那里卸载它(并删除其所有相关文件)。
然后重新安装到子文件夹中
C:\用户\MY_UNAME
说
C:\用户\MY_UNAME\git_4win
.
怎样才能做到这一点?
我使用gitk
来自Git for Windows
. 默认情况下,它似乎会打开一个仅显示当前签出分支的视图。
我有一个不同的已保存视图,这是我 90% 的时间都使用的视图。
我通常从命令行打开 gitk (通过运行gitk &
),然后必须更改视图。
有什么方法可以配置gitk
为默认使用我的首选视图吗?
我在 Windows 10 上安装了 Putty 和 Git,并且还在 Ubuntu 20.04 LTS 中使用 WSL2。有时我想使用 WSL2 中的 SSH 和 Git,其他时候则想在 Windows 中使用。一切工作正常,除了我必须在 Windows 和 WSL2 主目录中复制.gitconfig
,.gitignore
和文件。.ssh
我不想在两个地方维护这个配置,所以我想我可以在 WSL2 中对文件进行符号链接:
# In /home/myuser on WSL2
ln -s /mnt/c/Users/myuser/.ssh
ln -s /mnt/c/Users/myuser/.gitconfig
ln -s /mnt/c/Users/myuser/.gitignore
Run Code Online (Sandbox Code Playgroud)
除了一些问题之外,这种方法是有效的。
/mnt/c
具有0777
权限,chmod
显然不会对它们执行任何操作。当我ssh
在 WSL2 中使用时,它抱怨密钥:Permissions 0777 for '/home/myuser/.ssh/id_rsa' are too open
.gitconfig
我中core.excludesfile
设置为C:\\\\Users\\myuser\\.gitignore
,它在 Windows 中使用 Git 时有效,但在 WSL2 中无效。如果我将其更改为/home/myuser/.gitignore
它可以在 WSL2 …git putty windows-10 windows-subsystem-for-linux git-for-windows
我刚刚将安装的 Git LFS 从https://github.com/git-lfs/git-lfs/releases更新到最新版本 (2.3.0)。然而,当我跑步时git lfs version
我看到:
$ git lfs version
git-lfs/2.2.1 (GitHub; windows amd64; go 1.8.3; git 621d1f82)
Run Code Online (Sandbox Code Playgroud)
如果我运行git-lfs version
我会看到新版本:
$ git-lfs version
git-lfs/2.3.0 (GitHub; windows amd64; go 1.8.3; git 4dd2bf73)
Run Code Online (Sandbox Code Playgroud)
我不确定我是否理解该git lfs
命令在哪里找到它的 git-lfs。我已经找到了几个(或至少一个)旧的 git-lfs 安装并删除了它们,尽管 git 似乎仍然找到了一个旧的。并且路径中没有其他 git-lfs。
我需要做什么才能告诉 git 使用新安装的版本?
我正在运行 Windows 10 并使用 Cygwin。我在 PowerShell 和 cmd 中得到同样的结果。
编辑: 我发现了这个:
C:\Program Files\Git\mingw64\bin\git-lfs.exe
Run Code Online (Sandbox Code Playgroud)
这似乎是旧版本:
$ /cygdrive/c/Program\ Files/Git/mingw64/bin/git-lfs.exe version
git-lfs/2.2.1 (GitHub; windows amd64; go 1.8.3; git 621d1f82)
Run Code Online (Sandbox Code Playgroud)
我应该删除这个(另一个应该通过 找到PATH …
有适用于 Windows 的 git,还有适用于 Windows SDK 的 git。两者都提供了 git-bash.exe shell,但是当从 SDK 执行 shell 时,它总是在自己的窗口中打开。我希望能够将它用作 Windows 终端中的选项卡。我可以更改设置来实现此目的吗?
git-for-windows ×10
git ×8
windows-10 ×2
azure-devops ×1
c# ×1
fastexport ×1
git-lfs ×1
git-push ×1
github ×1
gitk ×1
libgit2 ×1
libgit2sharp ×1
mercurial ×1
openssh ×1
putty ×1
ssh-agent ×1