我目前正在尝试创建一个执行与cd
相同功能的PowerShell脚本,但也会检查.git文件夹(新目录是一个git存储库)然后如果为true,则后续获取并执行{{ 1}}。
我正在尝试在PowerShell ISE中进行调试,但在调试器中,我的脚本直接跳过git status
语句内的块。这是语法错误,还是if..else
正常工作?
if..else
P.S:我知道长function gd {
#set parameters taken from program (only file location)
Param(
[Parameter(Position=0)]
[String]$location
)
#get current directory location
[String]$Cl = $(Get-Location)
Set-Location $location
[String]$Nl = $(Get-Location)
if ($Cl -eq $Nl) {
return
} else {
Get-ChildItem -Hidden | Where-Object {
$_.Name -eq ".git"
} | Write-Output "Eureka!";
git fetch;
git status;
return
Write-Output "No .git found here!"
}
}
管道很糟糕(并且无法理解为无功能),但这是我的第一个脚本。欢迎任何帮助,但我的主要问题是跳过if / else代码块的执行。
答案 0 :(得分:1)
嗨,你的Where-Object管道中有一个错误,它应该是另一个if块。看到我修改过的代码,它对我有用。
function gd {
#set parameters taken from program (only file location)
Param(
[Parameter(Position=0)]
[String]$location
)
#get current directory location
[String]$Cl = $(Get-Location)
Set-Location $location
$location
[String]$Nl = $(Get-Location)
if ($Cl -eq $Nl) {
return
} else {
if(Get-ChildItem -Hidden | Where-Object {
$_.Name -eq ".git"
} )
{
Write-Output "Eureka!"
git fetch;
git status;
}
else{
Write-Output "No .git found here!"
}
}
}
gd D:\<git-folder>
希望这有帮助。
答案 1 :(得分:1)
只需使用Test-Path
检查.git
子文件夹即可。我还建议在调用git fetch
之前检查存储库是否实际被克隆。
function Set-LocationGit {
[CmdletBinding()]
Param(
[Parameter(Position=0, Mandatory=$true)]
[String]$Location
)
if ($Location -eq $PWD.Path) {
return # path not changed => nothing to do
}
Set-Location $Location
if (Test-Path -LiteralPath '.\.git' -Type Container) {
if (git config --get 'remote.origin.url') { git fetch }
git status
}
}